Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SPA mit ASP.NET Core und Angular

Neuen Datensatz anlegen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Sollen neue Datensätze über eine Web-API angelegt werden, nutzen Sie das HTTP-Verb Post. Während der Anlage haben Sie die Möglichkeit, über die Eigenschaft ModelState zu prüfen, ob die übergebenen Daten gültig waren.
09:56

Transkript

Mein Controller, den wir hier vor uns sehen, ist bisher bereits dazu in der Lage mir eine bestimmte oder alle Speisen, die sich in der Datei dishes.json befinden zurückzugeben. Nun möchte ich en Controller gerne erweitern und die Möglichkeit geben, dass wir auch speise anlegen können. Wenn wir neue Datensätze anlegen möchten, dann benutzen wir dazu das http-Verbpost. Also werde ich jetzt schon einmal das Attribut HttpPost einfügen und unterhalb des Attributs eine neue Methode anlegen. Diese ist wieder vom Typ IActionResult, da ich gegebenenfalls einen bestimmten Http-Code zurückgeben möchte. Wir schauen uns gleich an warum das so ist. Und der Name der Methode, der lautet Post. Übergeben an diese Methode muss ich ein vollständiges Speisenobjekt, also ein Objekt vom Typ dish. Damit ASP.NET MVC Core jetzt weiß, dass ich die Daten für dieses Objekt nicht in der URL, sondern innerhalb des Körpers der Anforderung befinden, muss ich ein spezielles Attribut vor diesen Parameter schreiben, nämlich das Attribut FromBody. Diese hilft dann später beim Deserealisieren, denn durch die Nutzung dieses Attributes ist klar, diese Daten werden innerhalb des Anfragekörpers mitgeschickt. Wie das konkret aussieht, das zeige ich Ihnen gleich, wenn ich in Postman die Anfrage starten werde. So, was muss ich jetzt an dieser Stelle machen? Zum einen gehe ich hin und lasse mir ein Ergebnis zurückliefern und zwar ein Ergebnis von meinem Repository. Mein Repository hat eine Methode None An die übergebe ich eine Speise und erhalte eine neue Speise dann zurück, beziehungsweise eine veränderte Speise, weil zum Beispiel die ID nicht übergeben wird bei der Anfrage und dann innerhalb des Repositories ermittelt wird. Jetzt könnte ich hier über return OK hingehen und mein Ergebnis zurückgeben. Und das würde auch soweit funktionieren. Ich würde den Http-Statuscode 200 zurückliefern und innerhalb des Antworttextes den deserealisierten Inhalt meiner Speise. Es gibt allerdings noch einen besseren Statuscode, nämlich die Möglichkeit, dass ich den Statuscode Created zurückgebe und dazu über einen erweiterten Header, nämlich über den Location-Header, sogar angebe unter welcher Route das Ganze dann erreichbar sein wird. Dazu benutze ich statt OK die Methode CreatedAtAction. Her gebe ich jetzt die Methode der Action an und zwar ist das die Methode Get. Außerdem gebe ich an, welches Argument übergeben werden muss, nämlich ich muss ein Objekt übergeben, was eine ID hat. Und zwar ist die ID, die ID meiner Speise und schlussendlich muss ich natürlich auch mein Ergebnis zurückgeben. Das reicht schon dazu aus, dass ich gleich eine sinnvolle Rückgabe in meiner Antwort habe. Schauen wir uns gleich aber mal ganz konkret an. Was jetzt noch fehlt, dass ich einmal in mein Repository wechsle über Steuerung+T und dann hier mein FileDishRepository öffne und die Methode CreateDish implementiere. Die gibt mir aktuell eine NotImplementedException zurück und ich habe jetzt hier zwei Möglichkeiten. Das eine wäre ich deserealisiere meine Daten, füge ein neues Objekt zur Liste hinzu und deserealisiere das später. Das andere ist, ich kürze jetzt hier an der Stelle ein wenig ab und sage einfach, ich gebe meiner Speise eine ID. Meinetwegen die ID 99. Das ist auch nur zu Demozwecken an der Stelle hier und gibt die einfach wieder zurück diese Speisen. Hintergrund ist, dass ich in einer echten Implementierung selbstverständlich hingehen würde und die Daten speichern würde. Hier geht es aber nun darum Ihnen zu demonstrieren, wie Sie eine Controller-Aktion schreiben, die Daten entgegennehmen kann und darum ist es hier nicht ganz so wichtig, dass die Daten korrekt gespeichert werden. So, ich gehe jetzt also einmal hin und starte das Ganze und dann werde ich gleich auch Postman öffnen und Ihnen zeigen, wie das Ganze aussieht, wenn Sie jetzt Daten an diese Controller-Action übergeben werden. Dazu wechsle ich einmal in Postman und hier habe ich bereits die URL entsprechend eingetragen. Ich wechsle das Http-Verb auf POST, dann gehe ich hin und muss einen Header setzen, nämlich den Content-Type-Header. Und über diesen Header kann ich der API mitteilen, dass ich JSON über die Leitungen sende. Und dieses JSON, das muss ich natürlich auch noch eintragen. Das mache ich hier im Tab Body, indem ich hier einmal auf raw klicke. application/json ist schon vorausgewählt und jetzt muss ich in JSON-Notation meine Nutzdaten übergeben. So, sie sehen hier auch, ich bekomme eine kleine IntelliSense. Wenn ich also etwas hier falsch mache, dann sehe ich hier, dass mein JSON falsch formatiert ist. So, was müssen wir übergeben? Wir müssen einen Namen übergeben. Der Name lautet zum Beispiel Ensalada Fantasia. Dann haben wir eine Description und die Description lautet Reste aus der Küche. Wir haben ein price, 3.99 meinetwegen und wir haben eine categoryId und zum Beispiel "1", so. Das sind zunächst einmal die Daten, die ich benötige, um einen Datensatz anlegen zu können und jetzt sende ich das Ganze einmal ab. Und Sie sehen hier unten, ich habe dieses Mal den Http-Statuscode 201 zurückerhalten, satt 200, nämlich Created. Und in meinem Header, dort habe ich jetzt einen sogenannten Location-Header und hier sehe ich jetzt, dieses neue Objekt, das würde ich erreichen unter localhost:61555/api/Dishes/99, also unter dieser neuen ID. Das kann ich jetzt natürlich nicht aufrufen, weil ich die Daten ja gar nicht wirklich gespeichert habe. Im Body sehe ich dann auch die entsprechenden Nutzdaten, die zurückgegeben worden sind. Soweit war das schon mal sehr gut. Die Frage ist natürlich, was passiert wenn ich Daten übergebe, die wenig Sinn machen. Zum Beispiel eine Speise ohne Namen. In einem solchen Fall, wenn ich meine Anfrage absende, dann bekomme ich auch wieder den Statuscode 201 zurück, nur der Name ist Null. Jetzt würde ich das ganz gerne verhindern, weil es macht keinen Sinn, dass ich Speisen ohne Namen übergebe. Und dazu kann ich folgendes machen. In Visual Studio gehe ich in mein Model, also in die Klasse Dish herein und schreibe über die Eigenschaft Name das Attribut Required. Dieses Attribut befindet sich im Namensraum System.ComponentModel.DataAnnotations. Den muss ich importieren. Und anschließend kann ich in meinem Controller die Frage stellen, od die Daten, die übergeben sind, überhaupt gültig sind. Dazu kann ich die Eigenschaft ModelState-Controllers benutzen. Und diese Eigenschaft hat wiederum eine weitere Eigenschaft, nämlich IsValid. Und wenn der ModelState nicht gültig ist, in genau diesem Fall möchte ich den Statuscode BadRequest zurückgeben, also sage ich return BadRequest und das ist der Statuscode 400 und jetzt kann ich an diesen Aufruf sogar meinen aktuellen ModelState übergeben. Und das führt dazu, dass ich sogar dann später Informationen darüber erhalte, warum die Daten nicht gültig sind. Gucken wir uns auch das einmal kurz an. Ich starte also meine Anwendung, wechsle in den Postman, habe hier meine ungültige Anfrage, sende das Ganze ab. Diesmal bekomme ich den Statuscode 400 BadRequest und bekomme darüberhinaus innerhalb meines Bodys noch den Hinweis, dass ich ein Problem mit dem Name field habe, denn das Name field das wird zwingend benötigt. Was wir also gesehen haben ist, dass wenn wir Daten anlegen möchten über eine API, dann nutzen wir dazu das Http-Verb Post. Eine entsprechende Methode, die wir in einem Controller bereitstellen, die wird dann mit dem Attribut HttpPost annotiert. Innerhalb der Implementierung muss ich darauf achten, dass die mit dem Attribut FromBody annotiert werden. Ich habe dann noch die Möglichkeit über die Eigenschaft ModelState zu überprüfen, ob die übergebenen Daten sinnvoll sind. Kann entsprechend drauf reagieren, falls das nicht der Fall ist, indem ich einen Http-Statuscode 400 inklusive Fehlermeldung zurückgebe. Darüberhinaus habe ich die Möglichkeit auch bei der Antwort im positiven Fall ein wenig Einfluss zu nehmen uns statt des Statuscodes 200, 201 nämlich Created zurückzugeben und ich kann sogar einen Location-Header setzen, indem ich CreatedAtAction aufrufe und kann dann hier angeben an welcher Adresse denn dieses Objekt auch wieder abgerufen werden könnte.

SPA mit ASP.NET Core und Angular

Lernen Sie die Bestandteile von modernen Webanwendungen kennen und nutzen.

5 Std. 21 min (36 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:25.09.2017
Laufzeit:5 Std. 21 min (36 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!