Harjoitus – CRUD-toimintojen toteuttaminen
Jatketaan WWW-ohjelmointirajapinnan ohjauskoneen laajentamista, jotta voimme luoda (POST), päivittää (PUT) ja poistaa (DELETE) pizzan luettelostamme.
Lisää pizza
Otetaanpa käyttöön pizzan lisääminen verkon ohjelmointirajapinnan kautta käyttämällä POST-menetelmää.
Korvaa // POST actionControllers/PizzaController.cs kommentti seuraavalla koodilla:
[HttpPost]
public IActionResult Create(Pizza pizza)
{
PizzaService.Add(pizza);
return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}
Edellinen toiminto:
- Vastaa vain HTTP
POSTverbiin, joka on merkitty[HttpPost]määritteellä. - Lisää pyynnön rungon
Pizza-objektin välimuistiin.
Muistiinpano
Koska rekisterinpitäjälle on lisätty merkintä [ApiController]-määrite, Pizza-parametri löytyy pyynnön leipätekstistä.
CreatedAtAction -menetelmäkutsun ensimmäinen parametri edustaa toiminnon nimeä.
nameof-avainsanaa käytetään, jotta toiminnon nimen koostaminen ei ole kiinteää.
CreatedAtAction luo toimintonimen avulla location HTTP-vastausotsikon, jossa on URL-osoite juuri luotuun pizzaan, kuten edellisessä yksikössä selitettiin.
Pizzan muokkaaminen
Otetaanpa sitten käyttöön pizzan päivittäminen verkon ohjelmointirajapinnan kautta käyttämällä PUT menetelmää.
Korvaa // PUT actionControllers/PizzaController.cs kommentti seuraavalla koodilla:
[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();
}
Edellinen toiminto:
- Vastaa vain HTTP PUT -verbiin, joka on merkitty
[HttpPut]määritteellä. - Edellyttää, että
id-parametrin arvo sisältyy URL-segmenttiinpizza/jälkeen. - Palauttaa
IActionResult, koskaActionResultpalautustyyppiä ei tiedetä ennen suorituspalvelua.BadRequest-,NotFound- jaNoContent-menetelmät palauttavat vastaavastiBadRequestResult-,NotFoundResult- jaNoContentResult-tyypit.
Muistiinpano
Koska rekisterinpitäjälle on lisätty merkintä [ApiController]-määrite, Pizza-parametri löytyy pyynnön leipätekstistä.
Poista pizza
Otetaan lopuksi käyttöön pizzan poistaminen verkon ohjelmointirajapinnan kautta käyttämällä DELETE menetelmää.
Korvaa // DELETE actionControllers/PizzaController.cs kommentti seuraavalla koodilla:
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var pizza = PizzaService.Get(id);
if (pizza is null)
return NotFound();
PizzaService.Delete(id);
return NoContent();
}
Edellinen toiminto:
- Vastaa vain HTTP
DELETEverbiin, joka on merkitty[HttpDelete]määritteellä. - Edellyttää, että
id-parametrin arvo sisältyy URL-segmenttiinpizza/jälkeen. - Palauttaa
IActionResult, koskaActionResultpalautustyyppiä ei tiedetä ennen suorituspalvelua.NotFound- jaNoContent-menetelmät palauttavatNotFoundResult- jaNoContentResult-tyyppejä. - Tekee kyselyn välimuistiin pizzalle, joka vastaa annettua
id-parametria.
Muista tallentaa Controllers/PizzaController.cs -tiedosto ennen jatkamista.
Valmiin WWW-ohjelmointirajapinnan luominen ja suorittaminen
Luo ja käynnistä www-ohjelmointirajapinta suorittamalla seuraava komento:
dotnet run
Valmiin www-ohjelmointirajapinnan testaaminen HTTP-tiedostoilla
Avaa uudelleen ContosoPizza.http- tiedosto.
Tee
POSTpyyntö lisätä uusi pizzaHttpReplkäyttämällä seuraavaa komentoa:POST {{ContosoPizza_HostAddress}}/pizza/ Content-Type: application/json { "name": "Hawaii", "isGlutenFree": false } ###Edellinen komento palauttaa juuri luodun pizzan:
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 }Päivitä uusi
HawaiipizzaHawaiianpizzaanPUT-pyynnöllä seuraavalla komennolla:PUT {{ContosoPizza_HostAddress}}/pizza/3 Content-Type: application/json { "id": 3, "name": "Hawaiian", "isGlutenFree": false } ###Edellinen komento palauttaa seuraavan onnistumisen osoittavan tulosteen:
HTTP/1.1 204 No Content Connection: close Date: Wed, 17 Jan 2024 17:07:30 GMT Server: KestrelVoit varmistaa, että pizza on päivitetty, suorittamalla
GETtoiminnon uudelleen käyttämällä seuraavaa komentoa:GET {{ContosoPizza_HostAddress}}/pizza/3 Accept: application/json ###Edellinen komento palauttaa äskettäin päivitetyn pizzan:
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 }Ohjelmointirajapintamme voi myös poistaa juuri luodun pizzan
DELETEtoiminnon avulla, jos suoritat seuraavan komennon:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###Edellinen komento palauttaa onnistumisen
204 No Contenttuloksen:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelVoit varmistaa, että pizza on poistettu, suorittamalla
GETtoiminnon uudelleen käyttämällä seuraavaa komentoa:GET {{ContosoPizza_HostAddress}}/pizza/ Accept: application/json ###Edellinen komento palauttaa alkuperäiset pizzat tuloksina:
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 } ]
Olet nyt toteuttanut ja testannut juuri luomasi verkko-ohjelmointirajapinnan, joka on luotu ASP.NET Coren avulla.
Valinnainen: Testaa valmis WWW-ohjelmointirajapinta komentorivillä HTTPREPL
Avaa olemassa oleva
httpreplpääte uudelleen tai avaa uusi integroitu pääteVisual Studio Codesta valitsemalla päävalikosta Terminal>New Terminal.Jos olet avannut uuden päätteen, muodosta yhteys www-ohjelmointirajapintaan suorittamalla seuraava komento:
httprepl https://localhost:{PORT}Vaihtoehtoisesti voit suorittaa seuraavan komennon milloin tahansa
HttpReplsuoritettaessa:connect https://localhost:{PORT}Siirry
Pizzapäätepisteeseen suorittamalla seuraava komento:cd PizzaSuorita seuraava komento, jotta näet uudet toiminnot pizzan ohjelmointirajapinnassa:
lsEdellä oleva komento näyttää käytettävissä olevien ohjelmointirajapintojen tuloksen
Pizzapäätepisteelle:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]Tee
POSTpyyntö lisätä uusi pizzaHttpReplkäyttämällä seuraavaa komentoa:post -c "{"name":"Hawaii", "isGlutenFree":false}"Edellinen komento palauttaa juuri luodun pizzan:
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 }Päivitä uusi
HawaiipizzaHawaiianpizzaanPUT-pyynnöllä seuraavalla komennolla:put 3 -c "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"Edellinen komento palauttaa seuraavan onnistumisen osoittavan tulosteen:
HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:23:55 GMT Server: KestrelVoit varmistaa, että pizza on päivitetty, suorittamalla
GETtoiminnon uudelleen käyttämällä seuraavaa komentoa:get 3Edellinen komento palauttaa äskettäin päivitetyn pizzan:
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 }Ohjelmointirajapintamme voi myös poistaa juuri luodun pizzan
DELETEtoiminnon avulla, jos suoritat seuraavan komennon:delete 3Edellinen komento palauttaa onnistumisen
204 No Contenttuloksen:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelVoit varmistaa, että pizza on poistettu, suorittamalla
GETtoiminnon uudelleen käyttämällä seuraavaa komentoa:getEdellinen komento palauttaa alkuperäiset pizzat tuloksina:
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 } ]
Olet nyt toteuttanut ja testannut juuri luomasi verkko-ohjelmointirajapinnan, joka on luotu ASP.NET Coren avulla.