2012-11-16 11 views
5

Biorąc pod uwagę metodę w kontrolerze:ASP.NET WebAPI Obsługiwane typy nośników na Metodzie

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

Czy istnieje sposób, aby określić obsługiwanych typów mediów z atrybutem? Na przykład CustomerDto jest złożoną klasą i będzie tylko serializować z JSON (application/json) nie XML (application/xml), ale może również akceptować PDF (application/pdf). Czy jest coś takiego:

[HttpGet(Accepts.JSON, Accepts.PDF)] 
    or 
[HttpGet][AcceptJSON][AcceptXML] 
    or 
[HttpGet][Accept("application/json")][Accept("application/pdf")] 

Jeśli przychodzące żądanie nie było obsługiwane, można zwrócić nieobsługiwany wyjątek/status.

Uwaga - nie chcę usuwać serializacji XML razem, ponieważ mogą być wykonane globalnie. Zamiast tego chciałbym zdefiniować, co jest akceptowane na trasie.

Używanie - ASP.NET WebAPI RC 1 (konieczność upgrade) + Własna Hosting

Odpowiedz

5

Brzmi jak niestandardowym ActionFilterAttribute może rade.

Utwórz nową klasę dziedziczącą po System.Web.Http.Filters.ActionFilterAttribute, nadpisuj metodę OnActionExecuting. Wewnątrz tej metody możesz sprawdzić nagłówki żądania, szukać tego, czego nie chcesz wspierać, i zwrócić odpowiednią odpowiedź.

Konstruktor niestandardowej ActionFilterAttribute może zawierać szczegółowe informacje o typach "akceptowanych", które chcesz przetworzyć oraz o tych, które chcesz odrzucić.

Przykładowy niestandardowy ActionFilterAttribute, sprawdź this post.

+0

To brzmi jak dobre podejście. Dzięki za twoją odpowiedź. –

Powiązane problemy