从 Web API 返回 ASP.NET 一些字段



如果只想从模型中返回某些字段,应该使用什么方法?我希望能够要求一些字段,如下所示:

?字段=电子邮件,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%,但我认为是

相关内容

  • 没有找到相关文章

最新更新