如果只想从模型中返回某些字段,应该使用什么方法?我希望能够要求一些字段,如下所示:
?字段=电子邮件,expiration_date,头像(thumb_width,thumb_height,thumb_url)
此表达式也可以是请求中的标头。我也有嵌套对象,例如用户中的头像。
这将为我节省数百MB的流量,因为我的一些模型真的很重。
更新:字段选择应同时适用于 Json 和 XML 响应。
我找到了一个为你做这件事的 nuget 包
WebApi.PartResponse
Git 集线器源代码:
https://github.com/dotarj/PartialResponse
基本上包装了上面讨论的格式化程序,因此您只需像这样配置它:
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new PartialJsonMediaTypeFormatter() { IgnoreCase = true });
然后,您可以在请求中指定?fields=<whatever>
,它将返回仅包含指定字段的模型。
我会替换默认的合约解析器(请参阅 http://frankapi.wordpress.com/2012/09/09/going-camelcase-in-asp-net-mvc-web-api/)使用自定义方法,从Newtonsoft.Json.Serialization.DefaultContractResolver类重写GetSerializableMembers方法,并使用查询字符串字段的值筛选其结果。
是否可以从该类访问查询字符串是另一个问题,您可以使用静态httpcontext.current来获取它,但可能有一个更干净的选项。
您也可以使用 OData。它为您提供了查询和 API 方式的极大灵活性。http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint
在您的情况下,您将使用$select。我也猜测阿凡达是另一个类,所以你会用$expand。
/api/endpoint?$select=email,expiration_date&$expand=avatar($select=thumb_width,thumb_height,thumb_url)
如果子选择的语法正确,我不是 100%,但我认为是