Cvičení – implementace operací CRUD
Pojďme dál rozšiřovat náš kontroler webového rozhraní API, aby se přidala možnost vytvářet ( POST ), aktualizovat () PUT a odstraňovat ( DELETE ) Pizza z našeho inventáře.
Přidat Pizza
Umožníme Pizza přidat prostřednictvím našeho webového rozhraní API POST metodou.
V souboru Controllers/PizzaController.cs nahraďte komentář
// POST actionnásledujícím kódem:[HttpPost] public IActionResult Create(Pizza pizza) { PizzaService.Add(pizza); return CreatedAtAction(nameof(Create), new { id = pizza.Id }, pizza); }Předcházející akce:
- Reaguje pouze na příkaz HTTP POST, jak označuje atribut
[HttpPost]. - Vloží objekt textu žádosti
Pizzado mezipaměti v paměti.
Poznámka
Kontroler je anotován atributem
[ApiController], který označuje, že se parametrPizzanachází v textu požadavku.První parametr ve volání metody
CreatedAtActionpředstavuje název akce. Klíčové slovonameofslouží k tomu, aby se předešlo pevnému zakódování názvu akce.CreatedAtActionpomocí názvu akce vygenerujelocationhlavičku odpovědi HTTP s adresou URL nově vytvořeného Pizza, jak je vysvětleno v předchozí jednotce.- Reaguje pouze na příkaz HTTP POST, jak označuje atribut
Úprava Pizza
Umožníme, aby se pizza aktualizovala prostřednictvím našeho webového rozhraní API PUT metodou.
V souboru Controllers/PizzaController.cs nahraďte komentář
// PUT actionnásledujícím kódem:[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(); }Předcházející akce:
- Reaguje pouze na příkaz HTTP PUT, jak označuje atribut
[HttpPut]. - Vyžaduje, aby
idhodnota parametru byla uvedena v segmentu adresy URL popizza/. - Vrátí
IActionResult, protože návratový typActionResultnení znám až do doby běhu. Metody, a vrací, a vBadRequestNotFoundNoContentBadRequestResultNotFoundResultNoContentResultuvedeném pořadí.
Poznámka
Kontroler je anotován atributem
[ApiController], který označuje, že se parametrPizzanachází v textu požadavku.- Reaguje pouze na příkaz HTTP PUT, jak označuje atribut
Odebrat Pizza
Pojďme povolit odebrání Pizza prostřednictvím našeho webového rozhraní API DELETE metodou.
V souboru Controllers/PizzaController.cs nahraďte komentář
// DELETE actionnásledujícím kódem:[HttpDelete("{id}")] public IActionResult Delete(int id) { var pizza = PizzaService.Get(id); if (pizza is null) return NotFound(); PizzaService.Delete(id); return NoContent(); }Předcházející akce:
- Reaguje pouze na příkaz HTTP DELETE, jak označuje atribut
[HttpDelete]. - Vyžaduje, aby
idhodnota tohoto parametru byla uvedena v segmentu adresy URL popizza/. - Vrátí
IActionResult, protože návratový typActionResultnení znám až do doby běhu. MetodyNotFoundaNoContentvracejí typyNotFoundResultaNoContentResult(v uvedeném pořadí). - Dotazuje se na mezipaměť v paměti pro Pizza, který odpovídá zadanému
idparametru.
- Reaguje pouze na příkaz HTTP DELETE, jak označuje atribut
Sestavení a spuštění dokončeného webového rozhraní API
Sestavte a spusťte webové rozhraní API spuštěním následujícího příkazu:
dotnet runhttpreplkliknutím na terminálu > nový terminál z hlavní nabídky otevřete existující terminál nebo otevřete nový integrovaný terminál z Visual Studio Code.Pokud jste otevřeli nový terminál, připojte se k našemu webovému rozhraní API spuštěním následujícího příkazu:
httprepl http://localhost:5000Případně spusťte následující příkaz kdykoli, když je spuštěný HttpRepl:
Například:
(Disconnected)> connect http://localhost:5000Přejděte ke koncovému bodu Pizza spuštěním následujícího příkazu:
cd PizzaSpusťte následující příkaz, který zobrazí nové akce v rozhraní Pizza API:
lsPředchozí příkaz zobrazí výstup dostupných rozhraní API dostupných pro
Pizzakoncový bod:http://localhost:5000/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]Vytvořte
POSTžádost o přidání nového Pizza do HttpRepl pomocí následujícího příkazu:post -c "{"name":"Hawaii", "isGlutenFree":false}"Následující příkaz vytvoří
POSTžádost o přidání nového Pizza do inventáře a potom vrátí seznam všech Pizza zpět:HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:23:09 GMT Location: http://localhost:5000/Pizza?id=3 Server: Kestrel Transfer-Encoding: chunked { "id": 3, "name": "Hawaii", "isGlutenFree": false }Pojďme aktualizovat nový
HawaiiPizza naHawaiianPizza sPUTpožadavkem s následujícím příkazem:put 3 -c "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"Tato akce vrátí následující výstup, který byl úspěšný:
HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:23:55 GMT Server: KestrelPokud chcete ověřit, že se pizza aktualizoval, můžeme akci znovu spustit
GETpomocí následujícího příkazu:get 3Tato akce vrátí nově aktualizované Pizza:
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 }Naše rozhraní API může také odstranit nově vytvořená Pizza s
DELETEakcí spuštěním následujícího příkazu:delete 3Tím se vrátí odpověď
204 No Contentpro úspěch:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelPokud chcete ověřit, že se pizza odebral, můžeme akci znovu spustit
GETpomocí následujícího příkazu:getTím se vrátí naše původní pizzas jako výsledky:
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 } ]
Nyní jsme dokončili implementaci a testování našeho nově vytvořeného webového rozhraní API vytvořeného pomocí ASP.NET Core. V dalším kroku nabídneme několik osvědčených postupů a dalších výukových modulů.
Potřebujete pomoc? Projděte si našeho průvodce odstraňováním potíží nebo nahlaste potíže a uveďte konkrétní připomínky.