最近、MVC4ベータ版からRCに更新しましたが、WebApiプロジェクトで小さな問題が発生しました。私が最初に気づいたことの1つは、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());
指定されたアクションにデータをPUTしようとすると、モデルプロバイダーの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にカスタムmodelbinderを登録する方法は?