最近,我从公测MVC4到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的属性通缉ModelBinder的
[HttpPut]
public void Put([ModelBinder(typeof(CustomDynamicObjectModelBinderProvider))] CustomDynamicObject model)
虽然这个作品我真的不希望在我所有的控制器/行动来使用此语法。
我想我应该提到的是我的模型绑定提供商继承:
System.Web.Http.ModelBinding.ModelBinderProvider
我这样说,因为我看到有下面的命名空间中的另一个ModelBinderProvider类:
Microsoft.Web.Mvc.ModelBinding
总结一下:如何注册在MVC4 RC的WebAPI的自定义模型绑定器?