【问题标题】:Can Content Negotiation Be Used to Control Return Types in the ASP.NET WebApi?内容协商能否用于控制 ASP.NET WebApi 中的返回类型?
【发布时间】:2012-07-07 08:09:17
【问题描述】:

我们正在构建一个其 GET 方法返回 DTO 的 Web api。我们希望构建它,以便在某些情况下,这些 DTO 被剥离了不必要的属性,以控制向下发送到客户端的数据量。例如,当我们返回一封电子邮件 DTO 时,我们有时希望客户指定它只需要主题、日期和 ID,而不是电子邮件的正文。在其他情况下,当然需要电子邮件的正文。

MVC WebApi 中执行此操作的最佳方式是什么?我研究了 MediaTypeFormatters,但他们似乎专注于数据的格式(JSONP、XML)而不是内容。

【问题讨论】:

  • 有很多方法可以做到这一点,最好是通过消息处理程序,但很难说什么,因为您没有指定如何确定将返回哪种对象/属性集作为响应给定的请求。通过自定义标题?通过一些IP白名单?通过查询字符串?
  • 抱歉这个含糊的问题。我想使用自定义标头来指示要返回的对象/属性集。我将更多地研究消息处理程序。谢谢。
  • Facebook Graph API 使用查询字符串参数 fields developers.facebook.com/docs/reference/api/selecting-results ,尽管这不是很 RESTy
  • 我想你可能会在这个问题中找到答案:stackoverflow.com/questions/13606675/…

标签: asp.net-web-api


【解决方案1】:

在我看来你想要一个自定义的媒体类型。

这可以与自定义 MediaTypeFormatter 结合使用。

例如,您可以定义自己的媒体类型(这是一个不好的名称示例):

application/vnd.me-shortform

然后,在您的代码中,您可以省略填写电子邮件正文并让默认格式化程序格式化您的结果。

或者您可以编写自己的 MediaTypeFormatter(继承现有的)并将其注册为您的自定义媒体类型。

然后,在 MediaTypeFormatter 中,您可以通过 DTO 上的属性或类似的东西确定电子邮件正文不是必需的,并省略将其作为结果的一部分。

Mark Seeman on Vendor Media Types 应该会给你一个很好的起点。

【讨论】:

  • 您能解释一下为什么您的媒体类型名称是一个不好的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2015-08-06
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多