【问题标题】:ASP.NET WebAPI Supported Media Types per Method每个方法的 ASP.NET WebAPI 支持的媒体类型
【发布时间】:2012-11-05 12:41:20
【问题描述】:

给定控制器中的方法:

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

【问题讨论】:

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


    【解决方案1】:

    听起来像自定义 ActionFilterAttribute 可能会解决问题。

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 2017-08-19
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多