Asp.net web api 内容协商能否用于控制ASP.NET WebApi中的返回类型?

Asp.net web api 内容协商能否用于控制ASP.NET WebApi中的返回类型?,asp.net-web-api,Asp.net Web Api,我们正在构建一个web api,其GET方法返回DTO。我们希望构建它,以便在某些情况下,剥离这些DTO不必要的属性,以控制发送到客户端的数据量。例如,当我们返回一个电子邮件DTO时,我们有时希望客户机指定它只需要主题、日期和ID,而不需要电子邮件正文。当然,在其他情况下,需要电子邮件的正文 MVC WebApi中实现这一点的最佳方法是什么?我已经研究过MediaTypeFormatter,但它们似乎关注的是数据的格式(JSONP、XML),而不是内容。我觉得您希望有一个自定义的mediatyp

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


MVC WebApi中实现这一点的最佳方法是什么?我已经研究过MediaTypeFormatter,但它们似乎关注的是数据的格式(JSONP、XML),而不是内容。

我觉得您希望有一个自定义的mediatype

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

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

然后,在代码中,您可以省略对emailbody的填充,并让默认格式化程序格式化您的结果

或者您可以编写自己的MediaTypeFormatter(对现有的MediaTypeFormatter进行子类化),并为自定义mediatype注册它

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


应该为您提供一个良好的起点。

有很多方法可以做到这一点,最好是通过消息处理程序,但很难说什么,因为您还没有指定如何确定响应给定请求将返回何种类型的对象/属性集。通过自定义标题?通过一些IP白名单?通过querystring?很抱歉这个模糊的问题。我想使用自定义头来指示要返回的对象/属性集。我将进一步研究消息处理程序。谢谢。Facebook Graph API使用了一个querystring参数字段,尽管这不是很简单。我想你可能会在这个问题中找到答案:你能解释一下为什么你的mediatype名称是一个不好的例子吗?
application/vnd.me-shortform