Harjoitus – Lisää ohjain

Valmis

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

  1. Valitse Controllers -kansio Visual Studio Codessa ja lisää uusi tiedosto nimeltä PizzaController.cs.

    Visual Studio Coden näyttökuva, joka näyttää uuden tiedoston lisäämisen Controllers-kansioon.

    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.

  2. 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 on PizzaController, tämä rekisterinpitäjä käsittelee pyynnöt https://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 GET verbiin, joka on merkitty [HttpGet] määritteellä.
  • Palauttaa tyyppiä ActionResultolevan List<Pizza> esiintymän. ActionResult tyyppi on ASP.NET Coren kaikkien toimintotulosten perusluokka.
  • Tekee kyselyn kaikesta pizzasta ja palauttaa automaattisesti tiedot, joiden Content-Type arvo on application/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 GET verbiin, joka on merkitty [HttpGet] määritteellä.
  • Edellyttää, että id-parametrin arvo sisältyy URL-segmenttiin pizza/jälkeen. Muista, että [Route] määrite /pizza määritteen perusteella.
  • Tekee kyselyn tietokannasta pizzalle, joka vastaa annettua id parametria.

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

  1. Avaa ContosoPizza.http

  2. Lisää uusi GET-, jotta voit kutsua Pizza-päätepistettä ###-seperaattorin alla:

    GET {{ContosoPizza_HostAddress}}/pizza/
    Accept: application/json
    
    ###
    
  3. 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
        }
    ]   
    
  4. Jos haluat kysellä yksittäistä pizzaa, voit tehdä toisen GET pyynnön, mutta välittää id parametrin käyttämällä seuraavaa komentoa:

    GET {{ContosoPizza_HostAddress}}/pizza/1
    Accept: application/json
    
    ###
    

    Edellinen komento palauttaa Classic Italian kä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
    }
    
  5. Ohjelmointirajapintamme käsittelee myös tilanteita, joissa kohdetta ei ole olemassa. Kutsu ohjelmointirajapintaa uudelleen, mutta välitä virheellinen pizza-id parametri käyttämällä seuraavaa komentoa:

    GET {{ContosoPizza_HostAddress}}/pizza/5
    Accept: application/json
    
    ###
    

    Edellinen komento palauttaa 404 Not Found virheen, 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)

  1. Avaa olemassa oleva httprepl pääte tai avaa uusi integroitu pääte Visual Studio Codesta valitsemalla päävalikosta Terminal>New Terminal.

  2. Muodosta yhteys www-ohjelmointirajapintaan suorittamalla seuraava komento:

    httprepl https://localhost:{PORT}
    

    Vaihtoehtoisesti voit suorittaa seuraavan komennon milloin tahansa HttpRepl suoritettaessa:

    connect https://localhost:{PORT}
    
  3. Jos haluat nähdä juuri käytettävissä olevat Pizza päätepisteen, suorita seuraava komento:

    ls
    

    Edellä 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]
    
  4. Siirry Pizza päätepisteeseen suorittamalla seuraava komento:

    cd Pizza
    

    Edellä oleva komento näyttää käytettävissä olevien ohjelmointirajapintojen tuloksen Pizza päätepisteelle:

    https://localhost:{PORT}/> cd Pizza
    /Pizza    [GET]
    
  5. Tee GET-pyyntö HttpRepl käyttämällä seuraavaa komentoa:

    get
    

    Edellinen 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
          }
      ]
    
  6. Jos haluat kysellä yksittäistä pizzaa, voit tehdä toisen GET pyynnön, mutta välittää id parametrin käyttämällä seuraavaa komentoa:

    get 1
    

    Edellinen komento palauttaa Classic Italian kä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
    }
    
  7. Ohjelmointirajapintamme käsittelee myös tilanteita, joissa kohdetta ei ole olemassa. Kutsu ohjelmointirajapintaa uudelleen, mutta välitä virheellinen pizza-id parametri käyttämällä seuraavaa komentoa:

    get 5
    

    Edellinen komento palauttaa 404 Not Found virheen, 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"
    }
    
  8. 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.