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
Pizza
de 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
id
parameter wordt opgenomen in het URL-segment napizza/
. - Retourneert
IActionResult
, omdat hetActionResult
retourtype pas bekend is als runtime. DeBadRequest
,NotFound
enNoContent
methoden retournerenBadRequestResult
respectievelijk ,NotFoundResult
enNoContentResult
typen.
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
id
parameter wordt opgenomen in het URL-segment napizza/
. - Retourneert
IActionResult
omdat het geretourneerde typeActionResult
niet bekend is tot runtime. De methodenNotFound
enNoContent
retourneren respectievelijk de typenNotFoundResult
enNoContentResult
. - Query's uitvoeren op de cache in het geheugen voor een pizza die overeenkomt met de opgegeven
id
parameter.
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
POST
aanvraag om een nieuwe pizza toeHttpRepl
te 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
Hawaii
pizza bij naar eenHawaiian
pizza met eenPUT
aanvraag 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: Kestrel
Voer de
GET
actie 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
DELETE
actie als u de volgende opdracht uitvoert:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###
De voorgaande opdracht retourneert een
204 No Content
resultaat voor succes:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: Kestrel
Voer de
GET
actie 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
httprepl
terminal 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
HttpRepl
deze wordt uitgevoerd:connect https://localhost:{PORT}
Ga naar het
Pizza
eindpunt door de volgende opdracht uit te voeren:cd Pizza
Voer de volgende opdracht uit om de nieuwe acties op de Pizza-API te bekijken:
ls
De voorgaande opdracht toont een uitvoer van beschikbare API's voor het
Pizza
eindpunt:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]
Maak een
POST
aanvraag om een nieuwe pizza toeHttpRepl
te 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
Hawaii
pizza bij naar eenHawaiian
pizza met eenPUT
aanvraag 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: Kestrel
Voer de
GET
actie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is bijgewerkt:get 3
Met 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
DELETE
actie als u de volgende opdracht uitvoert:delete 3
De voorgaande opdracht retourneert een
204 No Content
resultaat voor succes:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: Kestrel
Voer de
GET
actie opnieuw uit met behulp van de volgende opdracht om te controleren of de pizza is verwijderd:get
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.