2012-11-16 78 views
5

ASP.NET的WebAPI支持的媒體類型鑑於控制器的方法:每個方法

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

回答

5

聽起來像一個自定義ActionFilterAttribute可能做的伎倆。

創建一個從System.Web.Http.Filters.ActionFilterAttribute繼承的新類,重寫OnActionExecuting方法。在此方法內部,您可以檢查請求的標題,查找您不想支持的內容並返回適當的響應。

您的自定義ActionFilterAttribute的構造函數可以使用您要處理的「接受」類型以及要拒絕哪些類型的細節。

有關自定義ActionFilterAttribute的示例,請查看this post

+0

這聽起來很不錯。感謝您的答覆。 –