So viel mehr zu sagen

Erweiterte Möglichkeiten mit Web API
Kommentare

Das ASP.NET Web API gibt dem Entwickler Kontrolle über die generierten HTTP-Nachrichten. Darüber hinaus kann er benutzerdefinierte Formate implementieren, Querschnittsfunktionen an zentralen Stellen positionieren und REST-Services auch ohne IIS mittels Self-Hosting anbieten. Dieser Artikel zeigt die erweiterten Möglichkeiten mit Web API.

Windows Developer

Der Artikel „So viel mehr zu sagen“ ist zum ersten Mal erschienen im Windows Developer 6.2012

Teil 2: Erweiterte Möglichkeiten mit Web API

Nachdem im ersten Teil dieser zweiteiligen Artikelserie die Grundlagen des ASP.NET Web API [1] zur Implementierung von REST-basierten Services besprochen wurden, zeigt der vorliegende Teil Möglichkeiten zum Erweitern der bereitgestellten Funktionalität auf.

Zur Wiederholung der dafür benötigten Basics aus Teil 1 zeigt Listing 1 einen einfachen REST-Service, der mit Web API umgesetzt wurde. Als Basisklasse dient ApiController. Da der Methodenname mit Get beginnt, wird diese Methode auch über das HTTP-Verb GET angeboten, wobei aus diesen Konventionen durch den Einsatz entsprechender Attribute ausgebrochen werden kann. Der vollständige URL, über den die gezeigte Methode standardmäßig erreichbar ist, lautet http://rechner:port/WebSite/Hotels, wobei der letzte Abschnitt den Namen des ApiControllers ohne die Endung Controller darstellt, und der vorletzte Abschnitt mit dem Namen der Website beim Einsatz des Visual-Studio-internen Entwicklungswebservers entfällt.

Listing 1
public class HotelsController : ApiController
{
    public Hotel GetHotel(int id)
    {
        var rep = new HotelRepository();
        return rep.FindById(id);
    }
}  
Mehr Kontrolle über HTTP

Um mehr Kontrolle über die Nachrichten, die von Web API versendet werden, zu erhalten, kann der Entwickler anstatt des eigentlichen Rückgabewerts eine Instanz von HttpResponseMessage zurückliefern, Listing 2 demonstriert das. Die darin enthaltene Methode Post nimmt eine HotelBuchung entgegen und speichert sie. Anschließend erzeugt sie eine HttpResponseMessage und legt den HTTP-Statuscode auf den für diese Fälle vorgesehenen Wert Created (201) fest. Danach setzt sie den Kopfzeileneintrag Location auf jenen URL, unter dem die soeben angelegte Ressource ab sofort zu finden ist. Am Ende liefert sie die HttpResponseMessage zurück. Daten innerhalb der Nutzdaten werden nicht übertragen.

Listing 2
public class BuchungenController : ApiController
{
    public HttpResponseMessage Post(HotelBuchung buchung)
    {
        var rep = new HotelBuchungRepository();
        rep.Create(buchung);
 
        var response = new HttpResponseMessage(HttpStatusCode.Created);
        string uri = Url.Route(null, new { id = buchung.HotelBuchungId });
        response.Headers.Location = new Uri(Request.RequestUri, uri);
 
        return response;
 
    }
    [...]
}  

Während beim Aufruf der soeben betrachteten Methode Web API lediglich Kopfzeilen zurückliefert, finden sich im Ergebnis der Methode GetByHotel in Listing 3 auch Nutzdaten wieder. Daneben verwendet sie die typisierte Variante von HttpResponseMessage, wobei der Typparameter den Typ des Objekts in den Nutzdaten spezifiziert. Im betrachteten Fall handelt es sich dabei um List.

Listing 3
    public HttpResponseMessage> GetByHotel(int hotelId)
    {
        var rep = new HotelBuchungRepository();
        var buchungen = rep.FindByHotel(hotelId);
 
        var response = new HttpResponseMessage>(buchungen);
        response.Headers.CacheControl = new CacheControlHeaderValue();
        response.Headers.CacheControl.NoCache = true;
        response.StatusCode = HttpStatusCode.OK;
 
        return response;
    }  

Das erwartet Sie auf den kommenden Seiten:

  • Benutzerdefinierte Routen
  • Benutzerdefinierte Formate unterstützen
  • Formatter mit HttpClient verwenden
  • Querschnittsfunktionen mit Message Handler
  • Handler mit HttpClient
  • Services mit Self Hosting
  • SSL für Web API ohne IIS
  • Fazit
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -