我们正在构建一个其 GET 方法返回 DTO 的 web api。我们希望构建它,以便在某些情况下,这些 DTO 被剥离了不必要的属性,以控制向下发送到客户端的数据量。例如,当我们返回一封电子邮件 DTO 时,我们有时希望客户指定它只需要主题、日期和 ID,而不需要电子邮件的正文。当然,在其他情况下,需要电子邮件的正文。
MVC WebApi 中执行此操作的最佳方法是什么?我研究了 MediaTypeFormatters,但他们似乎专注于数据的格式(JSONP、XML)而不是内容。
我们正在构建一个其 GET 方法返回 DTO 的 web api。我们希望构建它,以便在某些情况下,这些 DTO 被剥离了不必要的属性,以控制向下发送到客户端的数据量。例如,当我们返回一封电子邮件 DTO 时,我们有时希望客户指定它只需要主题、日期和 ID,而不需要电子邮件的正文。当然,在其他情况下,需要电子邮件的正文。
MVC WebApi 中执行此操作的最佳方法是什么?我研究了 MediaTypeFormatters,但他们似乎专注于数据的格式(JSONP、XML)而不是内容。
在我看来,你想要一个自定义的媒体类型。
这可以与自定义 MediaTypeFormatter 结合使用。
例如,您可以定义自己的媒体类型(这是一个不好的名称示例):
application/vnd.me-shortform
然后,在您的代码中,您可以省略填写电子邮件正文并让默认格式化程序格式化您的结果。
或者您可以编写自己的 MediaTypeFormatter(继承现有的)并将其注册为您的自定义媒体类型。
然后,在 MediaTypeFormatter 中,您可以通过 DTO 上的属性或类似的方式确定电子邮件正文不是必需的,并省略将其作为结果的一部分。
供应商媒体类型上的 Mark Seeman应该给你一个很好的起点。