Gyakorlat – CRUD műveletek implementálása
Bővítsük tovább a webes API-vezérlőt, hogy hozzáadjuk a pizzák létrehozásának (), frissítésének (POSTPUT) és törlésének (DELETE) lehetőségét a készletből.
Pizza hozzáadása
Engedélyezzük egy pizza hozzáadását a webes API-val egy POST módszerrel.
Írja felül a // POST action megjegyzést a Controllers/PizzaController.cs fájlban a következő kóddal:
[HttpPost]
public IActionResult Create(Pizza pizza)
{
PizzaService.Add(pizza);
return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}
A fenti művelet a következőket végzi el:
- Csak a HTTP-igére
POSTválaszol az attribútum által[HttpPost]meghatározott módon. - Beszúrja a kérelem törzsének objektumát
Pizzaa memóriabeli gyorsítótárba.
Feljegyzés
Abból, hogy a vezérlő az [ApiController] attribútummal van ellátva, következik, hogy a kérés törzsében megtalálható lesz a Pizza paraméter.
A CreatedAtAction metódushívás első paramétere egy művelet nevének felel meg. A nameof kulcsszó használatával elkerülhető a művelet nevének szerepeltetése a kódban.
CreatedAtAction A műveletnév használatával létrehoz egy location HTTP-válaszfejlécet az újonnan létrehozott pizza URL-címével, ahogyan azt az előző leckében ismertette.
Pizza módosítása
Most engedélyezzük egy pizza frissítését a webes API-val egy PUT metódus használatával.
Írja felül a // PUT action megjegyzést a Controllers/PizzaController.cs fájlban a következő kóddal:
[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();
}
A fenti művelet a következőket végzi el:
- Csak HTTP PUT utasításokra válaszol. Ezt a
[HttpPut]attribútum jelzi. - Megköveteli, hogy a
idparaméter értéke szerepel a következőpizza/URL-szegmensben. - Visszaadja
IActionResult, mert aActionResultvisszatérési típus csak futtatókörnyezetben ismert. ABadRequest,NotFoundésNoContenta metódusok visszaadjákBadRequestResulta ,NotFoundResultésNoContentResulta típusokat.
Feljegyzés
Abból, hogy a vezérlő az [ApiController] attribútummal van ellátva, következik, hogy a kérés törzsében megtalálható lesz a Pizza paraméter.
Pizza eltávolítása
Végül engedélyezzük, hogy egy pizza el legyen távolítva a webes API-val egy DELETE módszerrel.
Írja felül a // DELETE action megjegyzést a Controllers/PizzaController.cs fájlban a következő kóddal:
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var pizza = PizzaService.Get(id);
if (pizza is null)
return NotFound();
PizzaService.Delete(id);
return NoContent();
}
A fenti művelet a következőket végzi el:
- Csak a HTTP-igére
DELETEválaszol az attribútum által[HttpDelete]meghatározott módon. - Megköveteli, hogy a
idparaméter értéke szerepel a következőpizza/URL-szegmensben. - A(z)
IActionResultértéket adja vissza, mert a(z)ActionResultvisszaadott típus csak futásidőben derül ki. A(z)NotFoundés a(z)NoContentmetódusokNotFoundResultésNoContentResulttípust adnak vissza. - Lekérdezi a memóriabeli gyorsítótárat a megadott
idparaméternek megfelelő pizzához.
A folytatás előtt ne felejtse el menteni a Vezérlők/PizzaController.cs fájlt,
A kész webes API létrehozása és futtatása
Hozza létre és indítsa el a webes API-t az alábbi parancs futtatásával:
dotnet run
A kész webes API tesztelése HTTP-fájlokkal
Nyissa meg újra a ContosoPizza.http fájlt.
Kérjen egy
POSTúj pizzátHttpRepla következő paranccsal:POST {{ContosoPizza_HostAddress}}/pizza/ Content-Type: application/json { "name": "Hawaii", "isGlutenFree": false } ###Az előző parancs visszaadja az újonnan létrehozott pizzát:
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 }Frissítse az új
Hawaiipizzát egyHawaiianpizzára aPUTkövetkező paranccsal:PUT {{ContosoPizza_HostAddress}}/pizza/3 Content-Type: application/json { "id": 3, "name": "Hawaiian", "isGlutenFree": false } ###Az előző parancs a következő kimenetet adja vissza, amely a sikerességet jelzi:
HTTP/1.1 204 No Content Connection: close Date: Wed, 17 Jan 2024 17:07:30 GMT Server: KestrelA pizza frissítésének ellenőrzéséhez futtassa újra a
GETműveletet az alábbi paranccsal:GET {{ContosoPizza_HostAddress}}/pizza/3 Accept: application/json ###Az előző parancs az újonnan frissített pizzát adja vissza:
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 }Az API az újonnan létrehozott pizzát is törölheti a
DELETEműveleten keresztül, ha a következő parancsot futtatja:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###Az előző parancs sikeres eredményt ad
204 No Contentvissza:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelA pizza eltávolításának ellenőrzéséhez futtassa újra a
GETműveletet az alábbi paranccsal:GET {{ContosoPizza_HostAddress}}/pizza/ Accept: application/json ###Az előző parancs eredményként visszaadja az eredeti pizzákat:
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 } ]
Ezzel befejezte a ASP.NET Core használatával létrehozott, újonnan létrehozott webes API implementálását és tesztelését.
Nem kötelező: A kész webes API tesztelése a HTTPREPL parancssorral
Nyissa meg újra a meglévő
httpreplterminált, vagy nyisson meg egy új integrált terminált a Visual Studio Code-ból a főmenü Új terminál termináljának> kiválasztásával.Ha megnyitott egy új terminált, csatlakozzon a webes API-hoz az alábbi parancs futtatásával:
httprepl https://localhost:{PORT}Másik lehetőségként futtassa a következő parancsot bármikor, miközben
HttpReplfut:connect https://localhost:{PORT}Lépjen a
Pizzavégpontra a következő parancs futtatásával:cd PizzaFuttassa a következő parancsot a Pizza API új műveleteinek megtekintéséhez:
lsAz előző parancs a végponthoz elérhető API-k kimenetét jeleníti meg
Pizza:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]Kérjen egy
POSTúj pizzátHttpRepla következő paranccsal:post -c "{"name":"Hawaii", "isGlutenFree":false}"Az előző parancs visszaadja az újonnan létrehozott pizzát:
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 }Frissítse az új
Hawaiipizzát egyHawaiianpizzára aPUTkövetkező paranccsal:put 3 -c "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"Az előző parancs a következő kimenetet adja vissza, amely a sikerességet jelzi:
HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:23:55 GMT Server: KestrelA pizza frissítésének ellenőrzéséhez futtassa újra a
GETműveletet az alábbi paranccsal:get 3Az előző parancs az újonnan frissített pizzát adja vissza:
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 }Az API az újonnan létrehozott pizzát is törölheti a
DELETEműveleten keresztül, ha a következő parancsot futtatja:delete 3Az előző parancs sikeres eredményt ad
204 No Contentvissza:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelA pizza eltávolításának ellenőrzéséhez futtassa újra a
GETműveletet az alábbi paranccsal:getAz előző parancs eredményként visszaadja az eredeti pizzákat:
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 } ]
Ezzel befejezte a ASP.NET Core használatával létrehozott, újonnan létrehozott webes API implementálását és tesztelését.