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

时间:2012-11-16 18:44:15

标签: asp.net-web-api asp.net-web-api-routing media-type

给出控制器中的方法:

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(需要升级)+自托管

1 个答案:

答案 0 :(得分:5)

听起来像自定义ActionFilterAttribute可能会有所作为。

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

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

有关自定义ActionFilterAttribute的示例,请查看this post