2012-09-30 92 views
6

如果我只想返回模型中的一些字段,應該使用什麼方法?我希望能夠問一些領域,像這樣:從ASP.NET Web API返回一些字段

領域是電子郵件,到期日期,化身(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這可以使用此處顯示的詳細信息管理到ASP.NET API中http://tostring.it/2012/07/18/customize-json-result-in-web -API / –

6

我發現了一個NuGet包,這是否爲你

WebApi.PartialResponse

GIT中轂源代碼:
https://github.com/dotarj/PartialResponse

它實質上包裹上面討論的格式化,這樣就只需要配置它是這樣的:

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

然後,你可以指定?fields=<whatever>在您的請求中,它將返回只有指定的字段的模型。

0

您也可以使用OData。它爲您在查詢和API方式方面提供了很大的靈活性。您可以使用$ select。我也猜測,阿凡達是另一個類,所以你會使用$ expand

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

我不是100%,如果子選擇的語法是正確的,但我認爲是。