Harjoitus – Lisää ohjain
rekisterinpitäjän on julkinen luokka, jossa on vähintään yksi julkinen menetelmä, jota kutsutaan toiminnoiksi. Käytännön mukaan rekisterinpitäjä sijoitetaan projektijuuren Controllers -hakemistoon. Toiminnot näytetään HTTP-päätepisteinä verkon ohjelmointirajapinnan ohjauskoneessa.
Luo ohjain
Valitse Controllers -kansio Visual Studio Codessa ja lisää uusi tiedosto nimeltä PizzaController.cs.
Controllers -hakemistoon luodaan tyhjä luokkatiedosto nimeltä PizzaController.cs. controllers hakemiston nimi on käytäntö. Hakemiston nimi on peräisin mallinäkymästäohjauskoneen www-ohjelmointirajapinnan käyttämälle arkkitehtuurille.
Muistiinpano
Käytännön mukaan ohjauskoneen luokkien nimet liitetään Controller.
Lisää seuraava koodi Controllers/PizzaController.cs. Tallenna muutoksesi.
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 }Kuten aiemmin olet oppinut, tämä luokka perustuu
ControllerBase, perusluokasta HTTP-pyyntöjen käsittelemiseen ASP.NET Coressa. Se sisältää myös kaksi vakiomääritettä, jotka olet oppinut:[ApiController]ja[Route]. Kuten aiemminkin,[Route]-määrite määrittää[controller]tunnuksen yhdistämismäärityksen. Koska tämän rekisterinpitäjäluokan nimi onPizzaController, tämä rekisterinpitäjä käsittelee pyynnöthttps://localhost:{PORT}/pizza.
Hae kaikki pizzat
Ensimmäinen REST-verbi, joka sinun on otettava käyttöön, on GET, josta asiakas voi saada kaikki pizzat ohjelmointirajapinnasta. Voit määrittää valmia [HttpGet] määritteen avulla menetelmän, joka palauttaa pizzat palvelustamme.
Korvaa // GET all action --kommentti seuraavalla koodilla:
[HttpGet]
public ActionResult<List<Pizza>> GetAll() =>
PizzaService.GetAll();
Edellinen toiminto:
- Vastaa vain HTTP
GETverbiin, joka on merkitty[HttpGet]määritteellä. - Palauttaa tyyppiä
ActionResultolevanList<Pizza>esiintymän.ActionResulttyyppi on ASP.NET Coren kaikkien toimintotulosten perusluokka. - Tekee kyselyn kaikesta pizzasta ja palauttaa automaattisesti tiedot, joiden
Content-Typearvo onapplication/json.
Yksittäisen pizzan noutaminen
Asiakas haluaa ehkä myös pyytää tietoja tietystä pizzasta koko luettelon sijaan. Voit ottaa käyttöön toisen GET toiminnon, joka edellyttää id -parametria. Voit määrittää valmia [HttpGet("{id}")] määritteen avulla menetelmän, joka palauttaa pizzat palvelustamme. Reitityslogiikka rekisteröi [HttpGet] (ilman id) ja [HttpGet("{id}")] (id) kahtena eri reitinä. Voit sitten kirjoittaa erillisen toiminnon yksittäisen kohteen noutamiseksi.
Korvaa // GET by Id action --kommentti seuraavalla koodilla:
[HttpGet("{id}")]
public ActionResult<Pizza> Get(int id)
{
var pizza = PizzaService.Get(id);
if(pizza == null)
return NotFound();
return pizza;
}
Edellinen toiminto:
- Vastaa vain HTTP
GETverbiin, joka on merkitty[HttpGet]määritteellä. - Edellyttää, että
id-parametrin arvo sisältyy URL-segmenttiinpizza/jälkeen. Muista, että[Route]määrite/pizzamääritteen perusteella. - Tekee kyselyn tietokannasta pizzalle, joka vastaa annettua
idparametria.
Jokainen edellisessä toiminnossa käytetty ActionResult-esiintymä yhdistetään seuraavaan taulukkoon vastaavaan HTTP-tilakoodiin:
| ASP.NET Core toiminnon tulos |
HTTP-tilakoodi | Kuvaus |
|---|---|---|
Ok on implisiittinen |
200 | Muistissa olevassa välimuistissa on tuote, joka vastaa annettua id -parametria.Tuote sisältyy vastauksen leipätekstiin mediatyypissä, joka on määritetty accept HTTP-pyynnön otsikossa (oletusarvoisesti JSON). |
NotFound |
404 | Välimuistissa ei ole tuotetta, joka vastaa annettua id -parametria. |
Luo ja suorita uusi ohjain
Luo ja käynnistä www-ohjelmointirajapinta suorittamalla seuraava komento:
dotnet run
Ohjaimen testaaminen Http-tiedoston avulla
Avaa ContosoPizza.http
Lisää uusi GET-, jotta voit kutsua
Pizza-päätepistettä ###-seperaattorin alla:GET {{ContosoPizza_HostAddress}}/pizza/ Accept: application/json ###Valitse tämän uuden GET -kutsun yläpuolella oleva Send Request -komento.
Edellinen komento palauttaa luettelon kaikista JSON-pizzoista:
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 } ]Jos haluat kysellä yksittäistä pizzaa, voit tehdä toisen
GETpyynnön, mutta välittääidparametrin käyttämällä seuraavaa komentoa:GET {{ContosoPizza_HostAddress}}/pizza/1 Accept: application/json ###Edellinen komento palauttaa
Classic Italiankäyttäen seuraavaa tulostetta: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 }Ohjelmointirajapintamme käsittelee myös tilanteita, joissa kohdetta ei ole olemassa. Kutsu ohjelmointirajapintaa uudelleen, mutta välitä virheellinen pizza-
idparametri käyttämällä seuraavaa komentoa:GET {{ContosoPizza_HostAddress}}/pizza/5 Accept: application/json ###Edellinen komento palauttaa
404 Not Foundvirheen, joka tuottaa seuraavan tuloksen: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" }
Nyt kun olet saanut GET verbit käyttöön. Seuraavassa osiossa voit lisätä PizzaController toimintoja, joilla tuetaan pizzadatan CRUD-toimintoja.
Valinnainen: Testaa ohjainta komentorivin HTTP-luku-Eval-Print silmukalla (REPL)
Avaa olemassa oleva
httpreplpääte tai avaa uusi integroitu pääte Visual Studio Codesta valitsemalla päävalikosta Terminal>New Terminal.Muodosta yhteys www-ohjelmointirajapintaan suorittamalla seuraava komento:
httprepl https://localhost:{PORT}Vaihtoehtoisesti voit suorittaa seuraavan komennon milloin tahansa
HttpReplsuoritettaessa:connect https://localhost:{PORT}Jos haluat nähdä juuri käytettävissä olevat
Pizzapäätepisteen, suorita seuraava komento:lsEdellä oleva komento tunnistaa kaikki ohjelmointirajapinnat, jotka ovat käytettävissä yhdistetyssä päätepisteessä. Sen pitäisi näyttää seuraava koodi:
https://localhost:{PORT}/> ls . [] Pizza [GET] WeatherForecast [GET]Siirry
Pizzapäätepisteeseen suorittamalla seuraava komento:cd PizzaEdellä oleva komento näyttää käytettävissä olevien ohjelmointirajapintojen tuloksen
Pizzapäätepisteelle:https://localhost:{PORT}/> cd Pizza /Pizza [GET]Tee
GET-pyyntöHttpReplkäyttämällä seuraavaa komentoa:getEdellinen komento palauttaa luettelon kaikista JSON-pizzoista:
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 } ]Jos haluat kysellä yksittäistä pizzaa, voit tehdä toisen
GETpyynnön, mutta välittääidparametrin käyttämällä seuraavaa komentoa:get 1Edellinen komento palauttaa
Classic Italiankäyttäen seuraavaa tulostetta: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 }Ohjelmointirajapintamme käsittelee myös tilanteita, joissa kohdetta ei ole olemassa. Kutsu ohjelmointirajapintaa uudelleen, mutta välitä virheellinen pizza-
idparametri käyttämällä seuraavaa komentoa:get 5Edellinen komento palauttaa
404 Not Foundvirheen, joka tuottaa seuraavan tuloksen: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" }Palaa
dotnet-päätteeseen Visual Studio Coden avattavassa luettelossa ja sammuta www-ohjelmointirajapinta valitsemalla näppäimistön CTRL+C.
Nyt kun olet saanut GET verbit käyttöön. Seuraavassa osiossa voit lisätä PizzaController toimintoja, joilla tuetaan pizzadatan CRUD-toimintoja.