给出控制器中的方法:
public class CustomerController : ApiController
{
[HttpGet]
public CustomerDto GetById([FromUri] int id)
{
.
.
return customerDto
}
}
有没有办法用属性指定支持的媒体类型?例如,CustomerDto是一个复杂的类,只能使用JSON(application / json)而不是XML(application / xml)进行序列化,但也可以接受PDF(application / pdf)。有这样的事情:
[HttpGet(Accepts.JSON, Accepts.PDF)]
or
[HttpGet][AcceptJSON][AcceptXML]
or
[HttpGet][Accept("application/json")][Accept("application/pdf")]
如果不支持传入请求,则可能会返回不支持的异常/状态。
注意 - 我不想像在全球范围内那样一起删除所谓的XML序列化。相反,我想定义每条路线接受的内容。
使用 - ASP.NET WebAPI RC 1(需要升级)+自托管
答案 0 :(得分:5)
听起来像自定义ActionFilterAttribute可能会有所作为。
创建一个继承自System.Web.Http.Filters.ActionFilterAttribute的新类,重写OnActionExecuting方法。在此方法中,您可以检查请求的标题,查找您不想支持的内容并返回适当的响应。
自定义ActionFilterAttribute的构造函数可以获取您要处理的“接受”类型以及要拒绝的类型的详细信息。
有关自定义ActionFilterAttribute的示例,请查看this post。