Gyakorlat – Vezérlő hozzáadása
A vezérlő egy nyilvános osztály, amely egy vagy több, úgynevezett műveletként ismert nyilvános metódussal rendelkezik. Konvenció szerint a rendszer egy vezérlőt helyez el a projekt gyökérkönyvtárában. A műveletek HTTP-végpontként jelennek meg a webes API-vezérlőben.
Vezérlő létrehozása
Válassza ki a Controllers mappát a Visual Studio Code-ban, és adjon hozzá egy új, PizzaController.cs nevű fájlt.
A vezérlők könyvtárában létrejön egy PizzaController.cs nevű üres osztályfájl. A Vezérlők könyvtárnév egy konvenció. A címtár neve a webes API által használt modellnézet-vezérlő architektúrából származik.
Feljegyzés
Konvenció szerint a vezérlőosztályok neve a Controller utótaggal van elnevezve.
Adja hozzá a következő kódot a vezérlőkhöz/PizzaController.cs. Mentse a módosításokat.
using ContosoPizza.Models; using ContosoPizza.Services; using Microsoft.AspNetCore.Mvc; namespace ContosoPizza.Controllers; [ApiController] [Route("[controller]")] public class PizzaController : ControllerBase { public PizzaController() { } // GET all action // GET by Id action // POST action // PUT action // DELETE action }Ahogy azt korábban megtudta, ez az osztály a HTTP-kérések ASP.NET Core-ban való használatának alaposztályából
ControllerBaseszármazik. Emellett tartalmazza a két standard attribútumot is, amelyről tanult:[ApiController]és[Route]. Az attribútum a[Route]korábbiakhoz hasonlóan meghatározza a jogkivonathoz való leképezést[controller]. Mivel ez a vezérlőosztály neve el van nevezvePizzaController, ez a vezérlő kezeli a kéréseket.https://localhost:{PORT}/pizza
Az összes pizza lekérése
Az első REST-ige, amelyet implementálnia kell, az GETaz, hogy az ügyfél minden pizzát le tud szerezni az API-ból. A beépített [HttpGet] attribútummal meghatározhat egy metódust, amely visszaadja a pizzákat a szolgáltatásból.
Cserélje le a // GET all actionvezérlők/PizzaController.cs megjegyzését a következő kódra:
[HttpGet]
public ActionResult<List<Pizza>> GetAll() =>
PizzaService.GetAll();
A fenti művelet a következőket végzi el:
- Csak a HTTP-igére
GETválaszol az attribútum által[HttpGet]meghatározott módon. - Egy típuspéldányt
ActionResultList<Pizza>ad vissza. AActionResulttípus a ASP.NET Core összes műveleteredményének alaposztálya. - Lekérdezi a szolgáltatást az összes pizza esetében, és automatikusan visszaadja a következő értékkel
Content-Typerendelkezőapplication/jsonadatokat: .
Egyetlen pizza lekérése
Előfordulhat, hogy az ügyfél a teljes lista helyett egy adott pizzáról szeretne információt kérni. Egy paramétert GET igénylő másik id műveletet is implementálhat. A beépített [HttpGet("{id}")] attribútummal meghatározhat egy metódust, amely visszaadja a pizzákat a szolgáltatásból. Az útválasztási [HttpGet] logika két különböző útvonalként regisztrálja a (nem id) és [HttpGet("{id}")] a (with id) útvonalat. Ezután külön műveletet írhat egyetlen elem lekéréséhez.
Cserélje le a // GET by Id actionvezérlők/PizzaController.cs megjegyzését a következő kódra:
[HttpGet("{id}")]
public ActionResult<Pizza> Get(int id)
{
var pizza = PizzaService.Get(id);
if(pizza == null)
return NotFound();
return pizza;
}
A fenti művelet a következőket végzi el:
- Csak a HTTP-igére
GETválaszol az attribútum által[HttpGet]meghatározott módon. - Megköveteli, hogy a
idparaméter értéke szerepel a következőpizza/URL-szegmensben. Ne feledje, hogy a vezérlőszintű[Route]attribútum definiálta a/pizzamintát. - Lekérdezi az adatbázist a megadott
idparaméternek megfelelő pizzához.
Az előző műveletben használt példányok ActionResult megfeleltetve lesznek a megfelelő HTTP-állapotkódhoz a következő táblázatban:
| ASP.NET Core a művelet eredménye |
HTTP-állapotkód | Leírás |
|---|---|---|
Ok beleértve |
200 | A megadott id paraméternek megfelelő termék a memóriabeli gyorsítótárban található.A termék a http-kérelem fejlécében (alapértelmezés szerint JSON) meghatározott accept médiatípus válasz törzsében található. |
NotFound |
404 | A megadott id paraméternek megfelelő termék nem létezik a memóriabeli gyorsítótárban. |
Az új vezérlő 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 vezérlő tesztelése Http-fájllal
A ContosoPizza.http megnyitása
Adjon hozzá egy új GET-t a
Pizzavégpont meghívásához a ### elválasztó alatt:GET {{ContosoPizza_HostAddress}}/pizza/ Accept: application/json ###Válassza a Kérés küldése parancsot az új GET-hívás felett.
Az előző parancs a JSON-ban lévő összes pizza listáját adja vissza:
HTTP/1.1 200 OK Connection: close Content-Type: application/json; charset=utf-8 Date: Wed, 17 Jan 2024 16:57:09 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Classic Italian", "isGlutenFree": false }, { "id": 2, "name": "Veggie", "isGlutenFree": true } ]Ha egyetlen pizzát szeretne lekérdezni, egy másik
GETkérést is megadhat, de a következő paranccsal adhat meg egyidparamétert:GET {{ContosoPizza_HostAddress}}/pizza/1 Accept: application/json ###Az előző parancs a következő kimenettel tér vissza
Classic Italian:HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 21:57:57 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 1, "name": "Classic Italian", "isGlutenFree": false }Az API olyan helyzeteket is kezel, amikor az elem nem létezik. Hívja meg újra az API-t, de adjon meg egy érvénytelen pizzaparamétert
ida következő paranccsal:GET {{ContosoPizza_HostAddress}}/pizza/5 Accept: application/json ###Az előző parancs egy
404 Not Foundhibát ad vissza a következő kimenettel:HTTP/1.1 404 Not Found Content-Type: application/problem+json; charset=utf-8 Date: Fri, 02 Apr 2021 22:03:06 GMT Server: Kestrel Transfer-Encoding: chunked { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4", "title": "Not Found", "status": 404, "traceId": "00-ec263e401ec554b6a2f3e216a1d1fac5-4b40b8023d56762c-00" }
Most, hogy befejezte az igék implementálását GET . A következő leckében további műveleteket adhat hozzá a CRUD-műveletek támogatásához PizzaController a pizzaadatokon.
Nem kötelező: A vezérlő tesztelése parancssori HTTP Read-Eval-Print Loop (REPL) használatával
Nyissa meg 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.Csatlakozzon a webes API-hoz a következő 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}Az újonnan elérhető
Pizzavégpont megtekintéséhez futtassa a következő parancsot:lsAz előző parancs észleli a csatlakoztatott végponton elérhető összes API-t. A következő kódot kell megjelenítenie:
https://localhost:{PORT}/> ls . [] Pizza [GET] WeatherForecast [GET]Lépjen a
Pizzavégpontra a következő parancs futtatásával:cd PizzaAz előző parancs a végponthoz elérhető API-k kimenetét jeleníti meg
Pizza:https://localhost:{PORT}/> cd Pizza /Pizza [GET]Küldjön
GETbe egy kéréstHttpRepla következő paranccsal:getAz előző parancs a JSON-ban lévő összes pizza listáját adja vissza:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 21:55:53 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Classic Italian", "isGlutenFree": false }, { "id": 2, "name": "Veggie", "isGlutenFree": true } ]Ha egyetlen pizzát szeretne lekérdezni, egy másik
GETkérést is megadhat, de a következő paranccsal adhat meg egyidparamétert:get 1Az előző parancs a következő kimenettel tér vissza
Classic Italian:HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 21:57:57 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 1, "name": "Classic Italian", "isGlutenFree": false }Az API olyan helyzeteket is kezel, amikor az elem nem létezik. Hívja meg újra az API-t, de adjon meg egy érvénytelen pizzaparamétert
ida következő paranccsal:get 5Az előző parancs egy
404 Not Foundhibát ad vissza a következő kimenettel:HTTP/1.1 404 Not Found Content-Type: application/problem+json; charset=utf-8 Date: Fri, 02 Apr 2021 22:03:06 GMT Server: Kestrel Transfer-Encoding: chunked { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4", "title": "Not Found", "status": 404, "traceId": "00-ec263e401ec554b6a2f3e216a1d1fac5-4b40b8023d56762c-00" }Térjen vissza a
dotnetterminálra a Visual Studio Code legördülő listájában, és állítsa le a webes API-t a CTRL+C billentyűkombinációval a billentyűzeten.
Most, hogy befejezte az igék implementálását GET . A következő leckében további műveleteket adhat hozzá a CRUD-műveletek támogatásához PizzaController a pizzaadatokon.