2012-11-16 12 views
5

ein Verfahren in einem Controller Gegeben:ASP.NET WebAPI Unterstützte Medientypen pro Methode

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

Gibt es eine Möglichkeit mit einem Attribut unterstützten Medientypen angeben? Zum Beispiel ist CustomerDto eine komplexe Klasse und wird nur mit JSON (application/json) nicht XML (application/xml) serialisieren, sondern kann auch PDF (application/pdf) akzeptieren. Gibt es etwas in der Art:

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

Wenn die eingehende Anfrage nicht unterstützt wurde, konnte eine nicht unterstützte Ausnahme/Status zurückgegeben werden.

Hinweis - ich will nicht alle zusammen XML-Serialisierung sagen entfernen, da global getan werden könnte. Stattdessen möchte ich definieren, was auf der Strecke akzeptiert wird.

Verwendung - ASP.NET WebAPI RC 1 (Upgrade benötigen) + Selbst

Antwort

5

Hosting Klingt wie eine benutzerdefinierte Action könnte den Trick tun.

eine neue Klasse erstellen, die von System.Web.Http.Filters.ActionFilterAttribute erbt, die OnActionExecuting Methode außer Kraft setzen. Innerhalb dieser Methode können Sie die Header der Anfrage überprüfen, nach etwas suchen, das Sie nicht unterstützen möchten, und eine entsprechende Antwort zurückgeben.

Der Konstruktor für die benutzerdefinierte Action konnte die Details, von denen „accept“ Typen nehmen Sie bearbeiten wollen, und die, die Sie ablehnen möchten.

Für ein Beispiel einer benutzerdefinierten Action, this post überprüfen.

+0

Das klingt nach einem guten Ansatz. Vielen Dank für Ihre Antwort. –