该类型未实现 IModelBinder 接口。参数名称:binderType
The type does not implement the IModelBinder interface. Parameter name: binderType
我已经为我的 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
{
}
验证您模型上的 ModelBinderAttribute 是否来自 System.Web.Http.ModelBinding or System.Web.Mvc。
(System.Web.Http.ModelBinding and System.Web.Mvc) 中都有 IModelBinder 的实现,并且您的属性与命名空间与您的活页夹相匹配
我已经为我的 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
{
}
验证您模型上的 ModelBinderAttribute 是否来自 System.Web.Http.ModelBinding or System.Web.Mvc。
(System.Web.Http.ModelBinding and System.Web.Mvc) 中都有 IModelBinder 的实现,并且您的属性与命名空间与您的活页夹相匹配