ASP.NET WebAPI支持每种方法的媒体类型

Mik*_*ley 5 media-type asp.net-web-api asp.net-web-api-routing

给定控制器中的方法:

public class CustomerController : ApiController
{
    [HttpGet]
    public CustomerDto GetById([FromUri] int id)
    {
        .
        .
        return customerDto
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用属性指定支持的媒体类型?例如,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")]
Run Code Online (Sandbox Code Playgroud)

如果不支持传入请求,则可能会返回不支持的异常/状态.

注意 - 我不想全部删除说XML序列化,因为全局可以完成.相反,我想定义每条路线接受的内容.

使用 - ASP.NET WebAPI RC 1(需要升级)+自托管

小智 5

听起来像自定义ActionFilterAttribute可能会成功.

创建一个继承自System.Web.Http.Filters.ActionFilterAttribute的新类,重写OnActionExecuting方法.在此方法中,您可以检查请求的标头,查找您不想支持的内容并返回适当的响应.

自定义ActionFilterAttribute的构造函数可以获取要处理的"接受"类型以及要拒绝的类型的详细信息.

有关自定义ActionFilterAttribute的示例,请查看此文章.