Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ASP.NET

ASP.NET-Web-API entwickeln

Read Time: 10 mins

German (Deutsch) translation by Valentina (you can also view the original English article)

ASP.NET-Web-API entwickelnASP.NET Web API ist ein Framework zum Erstellen von Web-APIs über .NET Framework, das HTTP verwendet. Da fast jede Plattform, die Sie sich vorstellen können, über eine HTTP-Bibliothek verfügt, können HTTP-Dienste von einer Vielzahl von Clients genutzt werden, einschließlich Browsern, mobilen Geräten und herkömmlichen Desktop-Anwendungen.

Die ASP.NET-Web-API nutzt die Konzepte von HTTP und bietet Funktionen wie:

  • Unterschiedlicher Request/Response-Typ wie HTML-, JSON- und Binärdateien (Bild/Audio/Video) und nicht nur XML-Inhalte, wie von SOAP erforderlich, werden unterstützt.
  • Integrierte Action-Zuordnung im Controller, basierend auf HTTP-Verben (GET, POST usw.)

Erstellen einer Web-API

Um eine Web-API zu erstellen, verwenden wir Visual Studio. Wenn Sie über Visual Studio 2012 oder eine höhere Version davon verfügen, können Sie alle mit Ihrer Web-API beginnen.

Neues Projekt starten

Wählen Sie im Menü Datei die Option Neu und dann Projekt.

Wählen Sie im Bereich Vorlagen die Option Installierte Vorlagen aus, und erweitern Sie den Knoten Visual C#. Wählen Sie unter Visual C# Web aus. Wählen Sie in der Liste der Projektvorlagen ASP.NET-Webanwendung aus. Legen Sie Ihren bevorzugten Namen für das Projekt fest und klicken Sie auf OK.

Starting a new project in Visual StudioStarting a new project in Visual StudioStarting a new project in Visual Studio

Starten Sie ein neues Projekt in Visual StudioIm nächsten Fenster wird eine Liste mit Vorlagen angezeigt. Sie können eine der Vorlagen aus der Liste auswählen, da sie alle DLL-Dateien und Konfigurationen enthalten, die zum Erstellen von Web-API-Controllern erforderlich sind. Wir werden jedoch zunächst die leere Projektvorlage auswählen.

Choosing WEB API project templateChoosing WEB API project templateChoosing WEB API project template

Controller hinzufügen

In der Web-API ist ein Controller ein Objekt, das HTTP-Anforderungen verarbeitet. Fügen wir schnell einen Controller zum Testen unserer Web-API hinzu.

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Controller. Wählen Sie Hinzufügen und dann Controller. Wir rufen den Controller TestController an und wählen in den Scaffolding-Optionen für Template die Option Empty API Controller aus. 

Adding first API ControllerAdding first API ControllerAdding first API Controller

Erster API-Controller hinzufügenVisual Studio erstellt unseren Controller aus der ApiController-Klasse. Fügen Sie hier eine Schnellfunktion hinzu, um unser API-Projekt zu testen, indem Sie es in IIS hosten.

Hosting in IIS

Jetzt werden wir unseren Service in IIS hinzufügen, damit wir lokal darauf zugreifen können. Öffnen Sie IIS und klicken Sie mit der rechten Maustaste auf Standardwebsite, um unseren Webdienst hinzuzufügen.

Hosting in IISHosting in IISHosting in IIS

Benennen Sie im Dialogfeld Anwendung hinzufügen Ihren Dienst TestAPI, und geben Sie einen Pfad zum Stammpfad des Visual Studio-Projekts an (sehen Sie unten).

Adding new application in IISAdding new application in IISAdding new application in IIS

Klicken Sie auf OK und unser Web-API-Dienst ist fertig.

Um zu testen, ob alles einwandfrei funktioniert, probieren Sie die folgende URL in einem beliebigen Browser aus: http://localhost/TestAPI/api/test.

Wenn Sie Ihren Controller als TestController bezeichnet haben und auch Ihren Web-Service in IIS als TestAPI bezeichnet haben, sollte Ihr Browser eine XML-Datei mit den Zeichenfolgenwerten hello world zurückgeben.

Response from Test ControllerResponse from Test ControllerResponse from Test Controller

Antwort von Test ControllerWenn Ihr IIS jedoch keine Berechtigung für den Projektordner hat, wird möglicherweise eine Fehlermeldung angezeigt: "Auf die angeforderte Seite kann nicht zugegriffen werden, da die zugehörigen Konfigurationsdaten für die Seite ungültig sind."

Wenn Sie diese Art von Fehler erhalten, können Sie den Fehler beheben, indem Sie der Benutzergruppe IIS_IUSRS Lese-/Schreibzugriff auf den Stammordner erteilen.

Routing

Schauen wir uns nun an, wie die URL funktioniert, die wir dem Browser zur Verfügung gestellt haben.

ASP.NET-Routing erledigt den Prozess des Empfangs einer Anforderung und deren Zuordnung zu einer Controller-Aktion. Das Web-API-Routing ähnelt dem MVC-Routing, weist jedoch einige Unterschiede auf. Das Web-API verwendet den HTTP-Anforderungstyp anstelle des Aktionsnamens in der URL (wie bei MVC), um die Aktion auszuwählen, die im Controller ausgeführt werden soll.

Die Routingkonfiguration für die Web-API ist in der Datei WebApiConfig.cs definiert. Die Standardroutingkonfiguration der ASP.NET-Web-API sieht wie folgt aus:

Die Standard-Routing-Vorlage für die Web-API lautet api/{controller}/{id}. Deshalb hatten wir in unserer URL "api" http://localhost/TestAPI/api/test.

Wenn das Web-API eine GET-Anforderung für einen bestimmten Controller empfängt, sind alle übereinstimmenden Aktionen alle Methoden, deren Name mit GET beginnt.  Das gleiche gilt für alle anderen HTTP-Verben. Die richtige aufzurufende Aktionsmethode wird durch Übereinstimmung der Signatur der Methode identifiziert.

Diese Namenskonvention für Aktionsmethoden kann mit HttpGet überschrieben werden.
HttpPut-, HttpPost- oder HttpDelete-Attribute mit den Aktionsmethoden.

Wenn wir also unseren vorherigen Code durch Folgendes ersetzen:

Und klicken Sie in unserem Browser auf http://localhost/TestAPI/api/test. Das führt immer noch zum gleichen Ergebnis. Wenn wir das Attribut HttpGet entfernen, kann unsere Web-API keine passende Aktion für unsere Anfrage finden.

Fügen wir nun eine andere Methode mit dem gleichen Namen Hello hinzu, jedoch mit einer anderen Signatur.

Mit dieser Methode können wir nun in gewissem Umfang kontrollieren, was von unserem Service zurückgegeben wird. Wenn wir diese Methode durch Aufruf von http://localhost/TestAPI/api/test/namaste testen (beachten Sie einen zusätzlichen Parameter am Ende der URL), erhalten Sie die folgende Ausgabe:

Response from Test Controller 2Response from Test Controller 2Response from Test Controller 2

Jetzt haben wir zwei Methoden, die Hello genannt werden.Man nimmt keine Parameter und gibt die Zeichenfolgen "Hallo Welt" zurück, und eine andere Methode nimmt einen Parameter und gibt "Ihre Parameter Welt" zurück.

Obwohl wir den Namen unserer Methode nicht in unserer URL angegeben haben, versteht das standardmäßige ASP.NET-Routing die Anforderung als GET-Anforderung. Basierend auf der Signatur der Anforderung (angegebene Parameter) wird die jeweilige Methode ausgeführt. Dies ist in Ordnung, wenn wir nur eine GET- oder POST-Methode in unserem Controller haben. Da es jedoch in einer realen Geschäftsanwendung normalerweise mehr als eine solche GET-Methode gibt, reicht dieses Standard-Routing nicht aus.

Fügen Sie eine weitere GET-Methode hinzu, um zu sehen, wie das Standardrouting damit umgeht.

Wenn wir jetzt unser Projekt erstellen und in unserem Browser http://localhost/TestAPI/api/test/ aufrufen, wird eine Fehlermeldung angezeigt, dass "Es wurden mehrere Aktionen gefunden wurden, die der Anforderung entsprechen", dh das Routing-System identifiziert zwei Aktionen, die der GET-Anfrage entsprechen.

Error Response from Test ControllerError Response from Test ControllerError Response from Test Controller

Anpassen des Standard-Routingsystems der Web-API

Um mehrere GET-Anforderungen von demselben Controller verwenden zu können, müssen Sie die Kennung des HTTP-Anforderungstyps mit einer aktionsbasierten Kennung ändern, damit mehrere GET-Anforderungen aufgerufen werden können.

Das kann durch Hinzufügen der folgenden Routenkonfiguration vor der Standardkonfiguration in WebApiConfig.cs erfolgen.

Testen Sie nun alle drei Methoden, indem Sie diese URLs aufrufen:

Web-API-Service-Struktur für mobile Geräte

Nachdem wir nun die Grundidee, wie Aktionen von Controllern über die API verfügbar gemacht werden können, verstanden haben, wollen wir uns ansehen, wie ein API-Dienst für Clients entworfen werden kann.

Image 9 Web API Service Structure FlowImage 9 Web API Service Structure FlowImage 9 Web API Service Structure Flow

Die ASP.NET-Web-API-Anforderungspipeline empfängt Anforderungen von der Clientanwendung, und eine Aktionsmethode in einem Controller wird aufgerufen. Die Aktionsmethode ruft wiederum die Business-Schicht zum Abrufen oder Aktualisieren von Daten auf, wodurch wiederum die Repository-Klasse aufgerufen wird, um Daten aus der Datenbank zurückzugeben.

Basierend auf diesem Entwurfsmuster erstellen wir eine Beispiel-API, die den Kunden eine Liste der klassifizierten Elemente als Service zur Verfügung stellt.

Erstellen Sie eine Klasse namens ClassifiedModel im Ordner Models.

Erstellen Sie zwei Ordner BLL und DAL, die den Business Logic Layer und den Data Access Layer darstellen.

Erstellen Sie im DAL-Ordner eine Klasse namens ClassifiedRepository, in der wir einige Daten für die klassifizierte Liste fest codieren und die Liste über eine statische Methode verfügbar machen.

Fügen wir nun eine weitere Klasse ClassifiedService im BLL-Ordner hinzu. Diese Klasse enthält eine statische Methode, um auf das Repository zuzugreifen und Geschäftsobjekte an den Controller zurückzugeben.  Basierend auf den Suchparametern gibt die Methode die Liste der klassifizierten Elemente zurück.

Abschließend erstellen wir nun unseren Web-API-Controller für die Methoden der klassifizierten Auflistung.

Ähnlich wie wir unseren ersten TestController erstellt haben, erstellen wir einen API-Controller mit leeren Lese-/Schreibaktionen namens ClassifiedsController und fügen die folgenden zwei Action-Methoden hinzu.

Jetzt haben wir zwei Aktionen über die API verfügbar gemacht. Die erste GET-Methode wird aufgerufen, wenn ein zu suchendes Schlüsselwort vorhanden ist, das zusammen mit der Anforderung übergeben wird.  Wenn kein Eingabeparameter vorhanden ist, wird die zweite GET-Methode aufgerufen. Beide Methoden geben eine Liste unserer klassifizierten Modellobjekte zurück.

Vergessen Sie nicht, alle erforderlichen Verweise auf die Namespaces in jeder der hinzugefügten Klassendateien hinzuzufügen. Erstellen Sie das Projekt, und wir sind bereit, beide Methoden jetzt zu testen.

Um Ergebnisse mit dem Suchparameter "house" anzuzeigen, klicken Sie im Browser auf folgende URL: http://localhost/TestAPI/api/classifieds/get/house.

Wir sollten die folgende Antwort im Browser erhalten:

GET Request with house as parameterGET Request with house as parameterGET Request with house as parameter

Um die gesamte Liste der Kleinanzeigen anzuzeigen, klicken Sie auf die URL, ohne Parameter zu übergeben: http://localhost/TestAPI/api/Classifieds/get/.

Sie sollten folgendes Ergebnis sehen:

GET Request without any parameterGET Request without any parameterGET Request without any parameter

Wir können beliebig viele Aktionen und Controller auf die von den Kunden gewünschte Weise hinzufügen.

Inhaltsverhandlung

Bisher haben wir Beispiele für APIs gesehen, die XML-Antworten an die Clients senden. Lassen Sie uns nun andere Inhaltstypen wie JSON und Image Response betrachten, die unter das Thema Content Negotiation fallen.

Die HTTP-Spezifikation (RFC 2616) definiert die Inhaltsaushandlung als „den Prozess der Auswahl der besten Darstellung für eine gegebene Antwort, wenn mehrere Darstellungen verfügbar sind.“ Dank der Inhaltsaushandlungsfunktion von Web API können Clients Web-API-Dienste mitteilen, welches Inhaltsformat sie akzeptieren und Web-API kann den Client automatisch mit demselben Format bedienen, sofern das Format in Web-API konfiguriert ist.

JSON-Format anfordern

Der HTTP-Accept-Header wird verwendet, um die Medientypen anzugeben, die für den akzeptabel sind
Client für die Antworten. Für XML wird der Wert als "application/xml" und für JSON "application/json" festgelegt.

Um unsere API mit den HTTP-Accept-Headern zu testen, können wir die für die Browser verfügbaren Erweiterungen verwenden, mit denen benutzerdefinierte HTTP-Anforderungen erstellt werden können.

Hier verwende ich eine Erweiterung namens HTTP-Werkzeug, die für Mozilla Firefox verfügbar ist, um den Accept-Header zu erstellen, der JSON als Antworttyp angibt.

Creating HTTP Request HeadersCreating HTTP Request HeadersCreating HTTP Request Headers

HTTP-Anforderungsheader erstellenWie Sie dem Bild entnehmen können, liegt die Antwort im JSON-Format vor.

Bilddatei als Antwort

Lassen Sie uns abschließend sehen, wie wir eine Image-Datei als Antwort über die Web-API senden können.

Erstellen Sie einen Ordner mit dem Namen Images und fügen Sie ein Bild mit dem Namen "default.jpg" hinzu. Fügen Sie dann die folgende Action-Methode in unserem ClassifiedsController hinzu.

Diese zwei Namespaces sollten ebenfalls enthalten sein: System.Web, System.Web.Http.

Hier erstellen wir eine HTTP-Antwort unter Verwendung der HttpResponseMessage-Klasse und setzen die Bildbytes als Antwortinhalt. Außerdem setzen wir den Content-Type-Header auf "image/png".

Wenn wir diese Aktion in unserem Browser aufrufen, sendet das Web-API jetzt unser default.jpg-Bild als Antwort: http://localhost/TestAPI/api/classifieds/Getimage/.

Sending Image as response from Web APISending Image as response from Web APISending Image as response from Web API

Schlussfolgerung

In diesem Lernprogramm haben wir untersucht, wie ASP.NET-Web-API problemlos als Action-Methoden von MVC-Controllern erstellt und für Clients verfügbar gemacht werden kann. Wir haben uns das Standard- und benutzerdefinierte Routingsystem angesehen, die Grundstruktur eines Echtzeit-API-Dienstes für Geschäftsanwendungen erstellt und auch verschiedene Antworttypen betrachtet.

Wenn Sie nach zusätzlichen Dienstprogrammen suchen, die Sie kaufen, überprüfen oder verwenden können, lesen Sie das .NET-Angebot von CodeCanyon.

Ich hoffe, Ihnen hat dieses Tutorial gefallen und es hat sich als nützlich erwiesen, um Ihre Web-APIs für mobile Geräte zu erstellen. Vielen Dank!

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.