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

6
在控制器中给定一个方法:
public class CustomerController : ApiController
{
    [HttpGet]
    public CustomerDto GetById([FromUri] int id)
    {
        .
        .
        return customerDto
    }
}

有没有一种方法可以使用属性指定支持的媒体类型?例如,CustomerDto是一个复杂的类,只能使用JSON(application/json)进行序列化,而不是XML(application/xml),但也可以接受PDF(application/pdf)。是否有类似于以下内容的东西:

[SupportedMediaTypes("application/json", "application/pdf")]
public class CustomerDto
{
   // properties and methods
}
[HttpGet(Accepts.JSON, Accepts.PDF)]  
    or
[HttpGet][AcceptJSON][AcceptXML]
    or
[HttpGet][Accept("application/json")][Accept("application/pdf")]

如果传入的请求不被支持,可能会返回一个不支持的异常/状态。

注意 - 我不想完全删除XML序列化,因为这可以在全局范围内完成。相反,我希望定义每个路由所接受的内容。

使用 - ASP.NET WebAPI RC 1(需要升级)+自承载。

1个回答

5

听起来像是自定义ActionFilterAttribute可以解决问题。

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

您自定义的ActionFilterAttribute的构造函数可以带有处理和拒绝哪些“接受”类型的详细信息。

如需自定义ActionFilterAttribute的示例,请参见 此文章


链接已失效,您可以在此链接中查看示例 https://dev59.com/uVUK5IYBdhLWcg3w4TGN - Alfredo A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接