如何在 .NET Framework Web 应用程序中为 Web Api 进行自定义模型绑定?

问题描述

我开始将旧的 .NET Framework ASP.NET API(不使用 WebApi 框架)转换为 .NET Core WebApi 项目。由于依赖关系,作为中间步骤,我只是将当前的 API 框架换成 WebApi,使项目以 .NET 框架为目标。

当前版本的 API 支持查询字符串上的逗号分隔值绑定到模型上的数组属性中;我想继续支持这个。

所以我需要一些自定义模型绑定。有很多类似的问题,但它们似乎都使用 .NET Core、不同版本的 WebApi 框架,并省略了正在使用的命名空间(例如 ASP.NET Core 1 Web API Model Binding Array)。

我正在使用 .NET Framework 4.7 和各种 Microsoft.AspNet.WebApi 包的 5.2.7 版。看起来我需要一个实现 IModelBinder 的类,但是这个接口至少存在于 3 个不同的命名空间中。

我到底需要实现什么 IModelBinder 接口,一旦我实现了它,我该如何告诉 WebApi 框架将我的绑定器用于特定属性

解决方法

由于您的目标是通过 Microsoft.AspNet.WebApi 包实现的 Web API,因此您需要使用这些包中的类型。具体来说,您需要命名空间 System.Web.Http.ModelBinding 中的 IModelBinder(它在 System.Web.Http.dll 包提供的 Microsoft.AspNet.WebApi.Core 中定义)。

有关如何在查询字符串上实现和使用绑定逗号分隔值的信息,请参阅THIS