6

モデルから一部のフィールドのみを返したい場合、どのアプローチを使用すればよいですか? 次のようないくつかのフィールドを要求できるようにしたい:

?fields=email,expiration_date,avatar(thumb_width,thumb_height,thumb_url)

この式は、リクエストのヘッダーにすることもできます。User 内の Avatar のように、ネストされたオブジェクトもあります。

私のモデルのいくつかは非常に重いものなので、これにより数百 MB のトラフィックを節約できます。

更新: フィールド選択は、Json 応答と XML 応答の両方で機能するはずです。

4

3 に答える 3

6

これを行うナゲットパッケージを見つけました

WebApi.PartialResponse

Git ハブのソース コード:
https://github.com/dotarj/PartialResponse

基本的に、上記のフォーマッタをラップするため、次のように構成するだけで済みます。

GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new PartialJsonMediaTypeFormatter() { IgnoreCase = true });

次に、?fields=<whatever>リクエストで指定すると、指定されたフィールドのみを含むモデルが返されます。

于 2014-10-09T17:29:36.093 に答える
2

デフォルトのコントラクト リゾルバー ( http://frankapi.wordpress.com/2012/09/09/going-camelcase-in-asp-net-mvc-web-api/を参照) をカスタムのものに置き換え、GetSerializableMembers をオーバーライドします。 Newtonsoft.Json.Serialization.DefaultContractResolver クラスのメソッドを呼び出し、クエリ文字列フィールドの値でその結果をフィルタリングします。

そのクラスからクエリ文字列にアクセスできるかどうかは別の問題です。静的な httpcontext.current を使用して取得できる場合がありますが、よりクリーンなオプションがある場合があります。

于 2012-10-01T03:52:51.363 に答える