Ü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 // POST action den Kommentar Controllers/PizzaController.cs 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 // PUT action den Kommentar Controllers/PizzaController.cs 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
idim URL-Segment hinterpizza/eingefügt wird. - Gibt
IActionResultzurück, weil der RückgabetypActionResulterst zur Laufzeit bekannt ist. Die MethodenBadRequest,NotFoundundNoContentgeben die TypenBadRequestResult,NotFoundResultundNoContentResultzurü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 // DELETE action den Kommentar Controllers/PizzaController.cs 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
idim URL-Segment hinterpizza/eingefügt wird. - Gibt
IActionResultzurück, weil derActionResult-Rückgabetyp erst zur Laufzeit bekannt ist. Die MethodenNotFoundundNoContentgeben den TypNotFoundResultbzw.NoContentResultzurü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 inHttpReplaus: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
Hawaiimit einerHawaiian-Anforderung mit dem folgenden Befehl in einePUT-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: KestrelFü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 Contentfür den Erfolg zurück:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelFü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
HttpReplausgeführt wird:connect https://localhost:{PORT}Navigieren Sie zum
Pizza-Endpunkt, indem Sie den folgenden Befehl ausführen:cd PizzaFühren Sie den folgenden Befehl aus, um die neuen Aktionen für die Pizza-API zu sehen:
lsDer 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 inHttpReplaus: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
Hawaiimit einerHawaiian-Anforderung mit dem folgenden Befehl in einePUT-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: KestrelFühren Sie die
GET-Aktion mit dem folgenden Befehl erneut aus, um zu überprüfen, ob die Pizza aktualisiert wurde:get 3Der 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 3Der vorherige Befehl gibt ein Ergebnis
204 No Contentfür den Erfolg zurück:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelFühren Sie die
GET-Aktion mit dem folgenden Befehl erneut aus, um zu überprüfen, ob die Pizza entfernt wurde:getDer 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.