2012-09-30 11 views
6

モデルから一部のフィールドのみを返す場合は、どのようなアプローチをとるべきですか?ASP.NET Web APIからいくつかのフィールドを返します

は、この式はまた、ヘッダすることができ

フィールド=メール、EXPIRATION_DATE、アバター(thumb_width、thumb_height、thumb_url):?私は、いくつかのフィールドのためにこのような何かを頼むことができるようにしたいです要求。私はまた、ユーザーの中のアバターのような入れ子になったオブジェクトを持っています。

私のモデルのうちのいくつかは本当に重いものなので、これは百MBのトラフィックを節約します。

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

答えて

2

私は、カスタムのいずれかで(http://frankapi.wordpress.com/2012/09/09/going-camelcase-in-asp-net-mvc-web-api/を参照)デフォルト契約リゾルバ を交換Newtonsoft.Json.Serialization.DefaultContractResolverクラスからGetSerializableMembersメソッドをオーバーライドして、クエリ文字列フィールドの値とその結果をフィルタリングします。

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

+0

ここでは、条件付きでJSONシリアライズオブジェクトからプロパティを削除する例を示します。 https://gist.github.com/33b5e6056c1d59e83b1a.gitこちらをご覧ください。http://tostring.it/2012/07/18/customize-json-result-in-web -api / –

6

私はこのあなたのための

WebApi.PartialResponse

Gitのハブのソースコードないnugetパッケージが見つかりました:あなたが唯一の設定するために持っているので、それは基本的に、前述のフォーマッタをラップ
https://github.com/dotarj/PartialResponse

をそれは次のようになります:

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

次に、 ?fields=<whatever>を要求し、指定されたフィールドのみを含むモデルを返します。

0

また、ODataを使用することもできます。これは、クエリやAPIの柔軟性を提供します。 http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint

あなたの場合、$ selectを使用します。私はまた、アバターが別のクラスだと推測していますので、$を使ってください。

/api/endpoint?$select=email,expiration_date&$expand=avatar($select=thumb_width,thumb_height,thumb_url) 

サブセレクトの構文が正しい場合は100%ではありませんが、私はそうだと思います。

関連する問題