该类型未实现 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.csGlobalConfiguration.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 的实现,并且您的属性与命名空间与您的活页夹相匹配