我为我的WebApi项目实施了custom model binder
using WebApi.Controllers;
using System.Web.Http.ModelBinding;
using System.Web.Http.Controllers;
namespace WebApi.Models
{
public class ModelBaseBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if ((bindingContext.Model is MyModel))
{
//my code here
controller.InitModel(model);
return true;
}
return false;
}
}
}
但由于某些原因Global.asax.cs
排在GlobalConfiguration.Configure(WebApiConfig.Register);
行,我收到的错误是:The type does not implement the IModelBinder interface. Parameter name: binderType
。
我的Global.asax.cs
看起来像这样:
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AutoMapperConfiguration.Configure();
GlobalConfiguration.Configuration.BindParameter(typeof(ModelBase), new ModelBaseBinder());
FluentValidationModelValidatorProvider.Configure(GlobalConfiguration.Configuration);
我猜测由于某种原因,MVC正在寻找System.Web.ModelBinding.IModelBinder
,但在WebApi的情况下,我System.Web.Http.ModelBinding.IModelBinder
实施了实施。
你知道如何解决这个问题吗?
更新
我发现如果我在我的控制器上评论这个方法:
public void Post([FromBody]MyModel model)
{
//my code here
}
比我没有收到上述错误。 但仍然无法理解为什么我会遇到这样的问题。
这是我的模型详情
public class MyModel : ModelBase
{
}
[ModelBinder(typeof(ModelBaseBinder))]
public class ModelBase
{
}
答案 0 :(得分:9)
验证模型上的 ModelBinderAttribute 是否来自System.Web.Http.ModelBinding或System.Web.Mvc。
在System.Web.Http.ModelBinding和System.Web.Mvc中都有 IModelBinder 的实现,并且您的属性与命名空间的命名空间匹配