Übung: Implementieren von CRUD-Vorgängen
Wir erweitern nun unseren Web-API-Controller, um die Möglichkeit zum Erstellen (POST
), Aktualisieren (PUT
) und Löschen (DELETE
) von Pizzas aus unserem Bestand hinzuzufügen.
Hinzufügen einer Pizza
Lassen Sie uns das Hinzufügen einer Pizza über die Web-API mithilfe einer POST
-Methode ermöglichen.
Ersetzen Sie in Controllers/PizzaController.cs den Kommentar // POST action
durch den folgenden Code:
[HttpPost]
public IActionResult Create(Pizza pizza)
{
PizzaService.Add(pizza);
return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}
Die vorherige Aktion:
- Reagiert nur auf das HTTP-Verb
POST
, wie durch das[HttpPost]
-Attribut angegeben. - Fügt das
Pizza
-Objekt des Anforderungstexts in den In-Memory-Cache ein.
Hinweis
Da der Controller mit dem [ApiController]
-Attribut versehen ist, wird impliziert, dass der Parameter Pizza
im Anforderungstext enthalten ist.
Der erste Parameter im Methodenaufruf CreatedAtAction
stellt einen Aktionsnamen dar. Das Schlüsselwort nameof
wird verwendet, um die Hartcodierung des Aktionsnamens zu vermeiden. CreatedAtAction
verwendet den Aktionsnamen, um einen location
-HTTP-Antwortheader mit einer URL zum neu erstellten Pizzadatensatz zu generieren, wie in der vorherigen Einheit erläutert.
Ändern einer Pizza
Lassen Sie uns nun das Aktualisieren einer Pizza über die Web-API mithilfe einer PUT
-Methode ermöglichen.
Ersetzen Sie in Controllers/PizzaController.cs den Kommentar // PUT action
durch den folgenden Code:
[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
if (id != pizza.Id)
return BadRequest();
var existingPizza = PizzaService.Get(id);
if(existingPizza is null)
return NotFound();
PizzaService.Update(pizza);
return NoContent();
}
Die vorherige Aktion:
- Reagiert gemäß des Attributs
[HttpPut]
ausschließlich auf das Aktionsverb HTTP-PUT. - Erfordert, dass der Wert des Parameters
id
im URL-Segment hinterpizza/
eingefügt wird. - Gibt
IActionResult
zurück, weil der RückgabetypActionResult
erst zur Laufzeit bekannt ist. Die MethodenBadRequest
,NotFound
undNoContent
geben die TypenBadRequestResult
,NotFoundResult
undNoContentResult
zurück.
Hinweis
Da der Controller mit dem [ApiController]
-Attribut versehen ist, wird impliziert, dass der Parameter Pizza
im Anforderungstext enthalten ist.
Entfernen einer Pizza
Lassen Sie uns schließlich das Entfernen einer Pizza über die Web-API mithilfe einer DELETE
-Methode ermöglichen.
Ersetzen Sie in Controllers/PizzaController.cs den Kommentar // DELETE action
durch den folgenden Code:
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var pizza = PizzaService.Get(id);
if (pizza is null)
return NotFound();
PizzaService.Delete(id);
return NoContent();
}
Die vorherige Aktion:
- Reagiert nur auf das HTTP-Verb
DELETE
, wie durch das[HttpDelete]
-Attribut angegeben. - Erfordert, dass der Wert des Parameters
id
im URL-Segment hinterpizza/
eingefügt wird. - Gibt
IActionResult
zurück, weil derActionResult
-Rückgabetyp erst zur Laufzeit bekannt ist. Die MethodenNotFound
undNoContent
geben den TypNotFoundResult
bzw.NoContentResult
zurück. - Fragt den In-Memory-Cache nach einer Pizza ab, die mit dem angegebenen
id
-Parameter übereinstimmt.
Denken Sie daran, die Datei Controllers/PizzaController.cs zu speichern, ehe Sie fortfahren.
Erstellen und Ausführen der fertiggestellten Web-API
Erstellen und starten Sie die Web-API, indem Sie den folgenden Befehl ausführen:
dotnet run
Testen der fertigen Web-API mit HTTP-Dateien
Öffnen Sie die Datei ContosoPizza.http erneut.
Geben Sie mit dem folgenden Befehl eine
POST
-Anforderung zum Hinzufügen einer neuen Pizza inHttpRepl
aus:POST {{ContosoPizza_HostAddress}}/pizza/ Content-Type: application/json { "name": "Hawaii", "isGlutenFree": false } ###
Der oben genannte Befehl gibt die neu erstellte Pizza zurück:
HTTP/1.1 201 Created Connection: close Content-Type: application/json; charset=utf-8 Date: Wed, 17 Jan 2024 17:03:02 GMT Server: Kestrel Location: http://localhost:5192/Pizza/3 Transfer-Encoding: chunked { "id": 3, "name": "Hawaii", "isGlutenFree": false }
Aktualisieren Sie die neue Pizza
Hawaii
mit einerPUT
-Anforderung mit dem folgenden Befehl in eineHawaiian
-Pizza:PUT {{ContosoPizza_HostAddress}}/pizza/3 Content-Type: application/json { "id": 3, "name": "Hawaiian", "isGlutenFree": false } ###
Der vorherige Befehl gibt die folgende Ausgabe zurück, die Erfolg angibt:
HTTP/1.1 204 No Content Connection: close Date: Wed, 17 Jan 2024 17:07:30 GMT Server: Kestrel
Führen Sie die
GET
-Aktion mit dem folgenden Befehl erneut aus, um zu überprüfen, ob die Pizza aktualisiert wurde:GET {{ContosoPizza_HostAddress}}/pizza/3 Accept: application/json ###
Der vorherige Befehl gibt die neu aktualisierte Pizza zurück:
HTTP/1.1 200 OK Connection: close Content-Type: application/json; charset=utf-8 Date: Wed, 17 Jan 2024 17:09:01 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 3, "name": "Hawaiian", "isGlutenFree": false }
Unsere API kann auch die neu erstellte Pizza mit der
DELETE
-Aktion löschen, wenn Sie den folgenden Befehl ausführen:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###
Der vorherige Befehl gibt ein Ergebnis
204 No Content
für den Erfolg zurück:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: Kestrel
Führen Sie die
GET
-Aktion mit dem folgenden Befehl erneut aus, um zu überprüfen, ob die Pizza entfernt wurde:GET {{ContosoPizza_HostAddress}}/pizza/ Accept: application/json ###
Der vorherige Befehl gibt die ursprünglichen Pizzas als Ergebnisse zurück:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:31:15 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Classic Italian", "isGlutenFree": false }, { "id": 2, "name": "Veggie", "isGlutenFree": true } ]
Sie haben nun die Implementierung und das Testen der mit ASP.NET Core neu erstellten Web-API abgeschlossen.
Optional: Testen der fertig gestellten Web-API mit der Befehlszeile HTTP REPL
Öffnen Sie das vorhandene
httprepl
-Terminal erneut, oder öffnen Sie ein neues integriertes Terminal aus Visual Studio Code, indem Sie im Hauptmenü Terminal>Neues Terminal auswählen.Wenn Sie ein neues Terminal geöffnet haben, stellen Sie mit dem folgenden Befehl eine Verbindung mit der Web-API her:
httprepl https://localhost:{PORT}
Alternativ können Sie den folgenden Befehl jederzeit ausführen, während
HttpRepl
ausgeführt wird:connect https://localhost:{PORT}
Navigieren Sie zum
Pizza
-Endpunkt, indem Sie den folgenden Befehl ausführen:cd Pizza
Führen Sie den folgenden Befehl aus, um die neuen Aktionen für die Pizza-API zu sehen:
ls
Der vorherige Befehl zeigt eine Ausgabe der verfügbaren APIs für den
Pizza
-Endpunkt an:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]
Geben Sie mit dem folgenden Befehl eine
POST
-Anforderung zum Hinzufügen einer neuen Pizza inHttpRepl
aus:post -c "{"name":"Hawaii", "isGlutenFree":false}"
Der oben genannte Befehl gibt die neu erstellte Pizza zurück:
HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:23:09 GMT Location: https://localhost:{PORT}/Pizza?id=3 Server: Kestrel Transfer-Encoding: chunked { "id": 3, "name": "Hawaii", "isGlutenFree": false }
Aktualisieren Sie die neue Pizza
Hawaii
mit einerPUT
-Anforderung mit dem folgenden Befehl in eineHawaiian
-Pizza:put 3 -c "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"
Der vorherige Befehl gibt die folgende Ausgabe zurück, die Erfolg angibt:
HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:23:55 GMT Server: Kestrel
Führen Sie die
GET
-Aktion mit dem folgenden Befehl erneut aus, um zu überprüfen, ob die Pizza aktualisiert wurde:get 3
Der vorherige Befehl gibt die neu aktualisierte Pizza zurück:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:27:37 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 3, "name": "Hawaiian", "isGlutenFree": false }
Unsere API kann auch die neu erstellte Pizza mit der
DELETE
-Aktion löschen, wenn Sie den folgenden Befehl ausführen:delete 3
Der vorherige Befehl gibt ein Ergebnis
204 No Content
für den Erfolg zurück:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: Kestrel
Führen Sie die
GET
-Aktion mit dem folgenden Befehl erneut aus, um zu überprüfen, ob die Pizza entfernt wurde:get
Der vorherige Befehl gibt die ursprünglichen Pizzas als Ergebnisse zurück:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:31:15 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Classic Italian", "isGlutenFree": false }, { "id": 2, "name": "Veggie", "isGlutenFree": true } ]
Sie haben nun die Implementierung und das Testen der mit ASP.NET Core neu erstellten Web-API abgeschlossen.