6 Stimmen

ASP.NET WebAPI Unterstützte Medientypen pro Methode

Angenommen, es gibt eine Methode in einem Controller:

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

Gibt es eine Möglichkeit, unterstützte Medientypen mit einem Attribut anzugeben? Zum Beispiel ist CustomerDto eine komplexe Klasse und wird nur mit JSON (application/json) serialisiert und nicht mit XML (application/xml), kann aber auch PDF (application/pdf) akzeptieren. Gibt es so etwas wie dies:

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

Wenn die eingehende Anfrage nicht unterstützt wurde, könnte eine Unsupported Exception / Status zurückgegeben werden.

Anmerkung - Ich möchte die XML-Serialisierung nicht vollständig entfernen, wie es global gemacht werden könnte. Stattdessen würde ich gerne definieren, was pro Route akzeptiert wird.

Verwendung - ASP.NET WebAPI RC 1 (muss aktualisiert werden) + Self Hosting

5voto

Mark Berryman Punkte 919

Klingt nach einem benutzerdefinierten ActionFilterAttribute, das funktionieren könnte.

Erstellen Sie eine neue Klasse, die von System.Web.Http.Filters.ActionFilterAttribute erbt, überschreiben Sie die Methode OnActionExecuting. In dieser Methode können Sie die Header der Anfrage prüfen, nach dem suchen, was Sie nicht unterstützen möchten, und eine geeignete Antwort zurückgeben.

Der Konstruktor für Ihr benutzerdefiniertes ActionFilterAttribute könnte Details zu den "accept"-Typen enthalten, die Sie verarbeiten möchten, und welche Sie ablehnen möchten.

Für ein Beispiel eines benutzerdefinierten ActionFilterAttribute schauen Sie sich diesen Beitrag an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X