2012-07-06 76 views
1

我们正在构建其GET方法返回DTO的Web API。我们希望构建它,以便在某些情况下,为了控制发送到客户端的数据量,这些DTO被剥夺了不必要的属性。例如,当我们返回我们的一封电子邮件DTO时,我们有时会希望客户指定它只需要一个主题,日期和ID,而不是电子邮件的正文。当然,在其他情况下,电子邮件的正文是必需的。可以使用内容协商来控制ASP.NET WebApi中的返回类型吗?

什么是在MVC WebApi这样做的最好方法是什么?我研究过MediaTypeFormatters,但他们似乎专注于数据的格式(JSONP,XML)而不是内容。

+1

有很多方法可以做到这一点,最好是通过消息处理程序,但很难说出任何内容,因为您尚未指定如何确定将响应给定请求返回哪种对象/属性集。 通过自定义标题?通过一些IP白名单?通过querystring? – 2012-07-09 10:11:01

+0

对不起,这个模糊的问题。我想使用自定义标题来指示要返回的对象/属性集。我会更多地关注消息处理程序。谢谢。 – neonbytes 2012-07-09 20:57:23

+0

Facebook图形API使用querystring参数_fields_ https://developers.facebook.com/docs/reference/api/selecting-results/,虽然这不是很RESTy – 2013-04-23 15:19:46

回答

0

这听起来像我想你想有一个自定义mediatype。

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

例如,你可以定义自己的介质类型(这是一个名称的为例):

application/vnd.me-shortform 

,然后在你的代码,你可以省略在emailbody灌装,让默认格式化程式格式化你的结果

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

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

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

+0

你能解释为什么你的mediatype名称是一个坏榜样? – 2013-04-23 15:16:09