该类型未实现IModelBinder接口。参数名称:binderType

时间:2015-08-28 19:03:58

标签: asp.net-mvc asp.net-web-api asp.net-mvc-5 asp.net-web-api2

我为我的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: binderTypeenter image description here

我的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
    {
    }

1 个答案:

答案 0 :(得分:9)

验证模型上的 ModelBinderAttribute 是否来自System.Web.Http.ModelBindingSystem.Web.Mvc

System.Web.Http.ModelBindingSystem.Web.Mvc中都有 IModelBinder 的实现,并且您的属性与命名空间的命名空间匹配