我最近从 MVC4 beta 更新到 RC,并且遇到了一个 WebApi 项目的小问题。我注意到的第一件事是 ServiceResolver 已被删除。在它被删除之前,我使用它通过以下方式注册自定义模型绑定器提供程序:
IEnumerable<object> modelBinderProviderServices = GlobalConfiguration.Configuration.ServiceResolver.GetServices(typeof(ModelBinderProvider));
List<Object> services = new List<object>(modelBinderProviderServices) { new CustomDynamicObjectModelBinderProvider() };
GlobalConfiguration.Configuration.ServiceResolver.SetServices(typeof(ModelBinderProvider), services.ToArray());
利用此模型绑定器提供程序的操作具有以下签名:
[HttpPut]
public void Put(CustomDynamicObject model)
我尝试用以下代码替换旧代码,但没有结果:
GlobalConfiguration.Configuration.Services.Add(typeof(ModelBinderProvider), new CustomDynamicObjectModelBinderProvider());
当我尝试将数据放入给定的操作时,模型提供者的 GetBinder 方法没有被调用,并且模型参数设置为 null。通过将 Acion/方法的签名更改为以下内容,我能够使用 ModelBinder 属性使操作使用所需的模型绑定器
[HttpPut]
public void Put([ModelBinder(typeof(CustomDynamicObjectModelBinderProvider))] CustomDynamicObject model)
虽然这可行,但我真的不想在我的所有控制器/操作中使用这种语法。
我想我应该提到我的模型绑定器提供程序继承自:
System.Web.Http.ModelBinding.ModelBinderProvider
我这样说是因为我看到以下命名空间中有另一个 ModelBinderProvider 类:
Microsoft.Web.Mvc.ModelBinding
回顾一下:如何在 MVC4 RC WebApi 中注册自定义模型绑定器?