23

ASP.NetWebAPIでカスタムモデルバインダーを作成したいと思います。これを最初から行う方法については多くのリソースがありますが、既存の機能を活用したいと思います。

私はcodeplexのソースを調べて、そこにたくさんのモデルバインダーを見ることができますが、ほとんどは封印されています...そしてそれでも、どの状況でどれが使用されるかを理解することはできません。

これが私のapiメソッドヘッダーです:

public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field)

私がやりたいのは、基本的に、すべての基本プロパティを設定した後でmodelbinderをインターセプトし、クライアント側で設定するhttpリクエストヘッダーに基づいていくつかの追加の値を設定することです。

私が言っているように、私はカスタムmodelbindersとmodelbinderprovidersを作成し、それらを配線することに慣れています。私が問題を抱えているのは、提供されている既存の機能を再利用しようとしていることです。

ありがとう、ピート

4

1 に答える 1

14

WebApiの拡張ポイントについては、こちらをご覧ください。

DefaultModelBinderWebApiの MVC に正確に相当するものはありません。

[FromBody]属性を使用している場合、FormatterParameterBindingが呼び出され、MediaTypeFormatterがモデルの構築に使用されます。

URI パスと URL (Query Params) のモデル バインダーが呼び出され、これが aまたは...ModelBinderParameterBindingに渡されます。IValueProviderIModelBinder

そう...

あなたの例Fieldでは (コンテンツ タイプ ネゴシエーションの結果に応じて) XmlMediaTypeFormatter、 、JsonMediaTypeFormatterまたはのいずれかを使用しFormUrlEncodedMediaTypeFormatterます。したがって、JSON.NET 設定などのそれぞれの設定を使用して、これらのシリアル化動作をカスタマイズするか、独自のまたはラップされた MediaTypeFormatter を実装するかは、あなた次第です。

あなたの例では、おそらくElementalValueProviderのような ...appIdに渡されます。IValueProvider

于 2013-02-05T11:09:56.050 に答える