Oefening - CRUD-bewerkingen implementeren
Laten we doorgaan met het uitbreiden van onze web-API-controller om de mogelijkheid toe te voegen om pizza's te maken (POST), bij te werken (PUT) en (DELETE) pizza uit onze voorraad te verwijderen.
Een pizza toevoegen
Laten we een pizza toevoegen via de web-API met behulp van een POST methode.
Vervang de opmerking // POST action in Controllers/PizzaController.cs door de volgende code:
[HttpPost]
public IActionResult Create(Pizza pizza)
{
PizzaService.Add(pizza);
return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}
De bovenstaande actie:
- Reageert alleen op het HTTP-woord
POST, zoals aangegeven door het[HttpPost]kenmerk. - Hiermee voegt u het object van
Pizzade aanvraagtekst in de cache in het geheugen in.
Notitie
Omdat er aan de controller een opmerking is toegevoegd met het [ApiController]-kenmerk, wordt geïmpliceerd dat de Pizza-parameter worden gevonden in de aanvraagbody.
De eerste parameter in de CreatedAtAction-methodeaanroep vertegenwoordigt een actienaam. Het nameof-trefwoord wordt gebruikt om hard-coding van de actienaam te voorkomen.
CreatedAtAction gebruikt de actienaam om een location HTTP-antwoordheader te genereren met een URL naar de zojuist gemaakte pizza, zoals uitgelegd in de vorige les.
Een pizza wijzigen
Nu gaan we inschakelen dat een pizza kan worden bijgewerkt via de web-API met behulp van een PUT methode.
Vervang de opmerking // PUT action in Controllers/PizzaController.cs door de volgende 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();
}
De bovenstaande actie:
- Reageert alleen op de HTTP PUT-opdracht, zoals wordt aangegeven met het
[HttpPut]-kenmerk. - Vereist dat de waarde van de
idparameter wordt opgenomen in het URL-segment napizza/. - Retourneert
IActionResult, omdat hetActionResultretourtype pas bekend is als runtime. DeBadRequest,NotFoundenNoContentmethoden retournerenBadRequestResultrespectievelijk ,NotFoundResultenNoContentResulttypen.
Notitie
Omdat er aan de controller een opmerking is toegevoegd met het [ApiController]-kenmerk, wordt geïmpliceerd dat de Pizza-parameter worden gevonden in de aanvraagbody.
Een pizza verwijderen
Laten we ten slotte een pizza via de web-API verwijderen met behulp van een DELETE methode.
Vervang de opmerking // DELETE action in Controllers/PizzaController.cs door de volgende code:
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var pizza = PizzaService.Get(id);
if (pizza is null)
return NotFound();
PizzaService.Delete(id);
return NoContent();
}
De bovenstaande actie:
- Reageert alleen op het HTTP-woord
DELETE, zoals aangegeven door het[HttpDelete]kenmerk. - Vereist dat de waarde van de
idparameter wordt opgenomen in het URL-segment napizza/. - Retourneert
IActionResultomdat het geretourneerde typeActionResultniet bekend is tot runtime. De methodenNotFoundenNoContentretourneren respectievelijk de typenNotFoundResultenNoContentResult. - Query's uitvoeren op de cache in het geheugen voor een pizza die overeenkomt met de opgegeven
idparameter.
Vergeet niet om het bestand controllers/PizzaController.cs op te slaan voordat u doorgaat.
De voltooide web-API bouwen en uitvoeren
Bouw en start de web-API door de volgende opdracht uit te voeren:
dotnet run
De voltooide web-API testen met HTTP-bestanden
Open het bestand ContosoPizza.http opnieuw.
Maak een
POSTaanvraag om een nieuwe pizza toeHttpReplte voegen met behulp van de volgende opdracht:POST {{ContosoPizza_HostAddress}}/pizza/ Content-Type: application/json { "name": "Hawaii", "isGlutenFree": false } ###Met de voorgaande opdracht wordt de zojuist gemaakte pizza geretourneerd:
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 }Werk de nieuwe
Hawaiipizza bij naar eenHawaiianpizza met eenPUTaanvraag met behulp van de volgende opdracht:PUT {{ContosoPizza_HostAddress}}/pizza/3 Content-Type: application/json { "id": 3, "name": "Hawaiian", "isGlutenFree": false } ###De voorgaande opdracht retourneert de volgende uitvoer die aangeeft dat het is gelukt:
HTTP/1.1 204 No Content Connection: close Date: Wed, 17 Jan 2024 17:07:30 GMT Server: KestrelVoer de
GETactie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is bijgewerkt:GET {{ContosoPizza_HostAddress}}/pizza/3 Accept: application/json ###Met de voorgaande opdracht wordt de zojuist bijgewerkte pizza geretourneerd:
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 }Onze API kan de zojuist gemaakte pizza ook verwijderen via de
DELETEactie als u de volgende opdracht uitvoert:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###De voorgaande opdracht retourneert een
204 No Contentresultaat voor succes:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelVoer de
GETactie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is verwijderd:GET {{ContosoPizza_HostAddress}}/pizza/ Accept: application/json ###De voorgaande opdracht retourneert de oorspronkelijke pizza's als resultaat:
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 } ]
U bent nu klaar met het implementeren en testen van een zojuist gemaakte web-API die is gebouwd met ASP.NET Core.
Optioneel: de voltooide web-API testen met OPDRACHTREGEL-HTTPREPL
Open de bestaande
httpreplterminal opnieuw of open een nieuwe geïntegreerde terminal vanuit Visual Studio Code door Terminal>New Terminal te selecteren in het hoofdmenu.Als u een nieuwe terminal hebt geopend, maakt u verbinding met de web-API door de volgende opdracht uit te voeren:
httprepl https://localhost:{PORT}U kunt ook de volgende opdracht op elk gewenst moment uitvoeren terwijl
HttpRepldeze wordt uitgevoerd:connect https://localhost:{PORT}Ga naar het
Pizzaeindpunt door de volgende opdracht uit te voeren:cd PizzaVoer de volgende opdracht uit om de nieuwe acties op de Pizza-API te bekijken:
lsDe voorgaande opdracht toont een uitvoer van beschikbare API's voor het
Pizzaeindpunt:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]Maak een
POSTaanvraag om een nieuwe pizza toeHttpReplte voegen met behulp van de volgende opdracht:post -c "{"name":"Hawaii", "isGlutenFree":false}"Met de voorgaande opdracht wordt de zojuist gemaakte pizza geretourneerd:
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 }Werk de nieuwe
Hawaiipizza bij naar eenHawaiianpizza met eenPUTaanvraag met behulp van de volgende opdracht:put 3 -c "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"De voorgaande opdracht retourneert de volgende uitvoer die aangeeft dat het is gelukt:
HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:23:55 GMT Server: KestrelVoer de
GETactie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is bijgewerkt:get 3Met de voorgaande opdracht wordt de zojuist bijgewerkte pizza geretourneerd:
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 }Onze API kan de zojuist gemaakte pizza ook verwijderen via de
DELETEactie als u de volgende opdracht uitvoert:delete 3De voorgaande opdracht retourneert een
204 No Contentresultaat voor succes:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelVoer de
GETactie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is verwijderd:getDe voorgaande opdracht retourneert de oorspronkelijke pizza's als resultaat:
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 } ]
U bent nu klaar met het implementeren en testen van een zojuist gemaakte web-API die is gebouwd met ASP.NET Core.