Övning – Implementera CRUD-åtgärder

Slutförd

Nu ska vi fortsätta utöka vår webb-API-kontrollant för att lägga till möjligheten att skapa (POST), uppdatera (PUT) och ta bort (DELETE) pizza från vårt lager.

Lägg till en pizza

Nu ska vi göra det möjligt att lägga till en pizza via webb-API:et med hjälp av en POST metod.

Ersätt kommentaren // POST action i Controllers/PizzaController.cs med följande kod:

[HttpPost]
public IActionResult Create(Pizza pizza)
{            
    PizzaService.Add(pizza);
    return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}

Föregående åtgärd:

  • Svarar endast på HTTP-verbet POST , vilket anges av [HttpPost] attributet.
  • Infogar begärandetextens Pizza objekt i minnesintern cacheminnet.

Kommentar

Eftersom kontrollanten kommenteras med [ApiController]-attributet är det underförstått att Pizza-parametern finns i begärandetexten.

Den första parametern i CreatedAtAction-metodanropet representerar ett åtgärdsnamn. nameof-nyckelordet används för att undvika hårdkodning av åtgärdsnamnet. CreatedAtAction använder åtgärdsnamnet för att generera ett location HTTP-svarshuvud med en URL till den nyligen skapade pizzan, enligt beskrivningen i föregående lektion.

Ändra en pizza

Nu ska vi aktivera en pizza som ska uppdateras via webb-API:et med hjälp av en PUT metod.

Ersätt kommentaren // PUT action i Controllers/PizzaController.cs med följande kod:

[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();
}

Föregående åtgärd:

  • Svarar endast på HTTP PUT-verbet, vilket anges av [HttpPut]-attributet.
  • Kräver att id parameterns värde ingår i URL-segmentet efter pizza/.
  • Returnerar IActionResult, eftersom ActionResult returtypen inte är känd förrän körningen. Metoderna BadRequest, NotFound, och NoContent returnerar BadRequestResult, NotFoundResultrespektive NoContentResult typer.

Kommentar

Eftersom kontrollanten kommenteras med [ApiController]-attributet är det underförstått att Pizza-parametern finns i begärandetexten.

Ta bort en pizza

Slutligen ska vi aktivera att en pizza tas bort via webb-API:et med hjälp av en DELETE metod.

Ersätt kommentaren // DELETE action i Controllers/PizzaController.cs med följande kod:

[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
    var pizza = PizzaService.Get(id);
   
    if (pizza is null)
        return NotFound();
       
    PizzaService.Delete(id);
   
    return NoContent();
}

Föregående åtgärd:

  • Svarar endast på HTTP-verbet DELETE , vilket anges av [HttpDelete] attributet.
  • Kräver att id parameterns värde ingår i URL-segmentet efter pizza/.
  • Returnerar IActionResult eftersom returneringstypen ActionResult inte är känd förrän körningen. Metoderna NotFound och NoContent returnerar typerna NotFoundResult respektive NoContentResult.
  • Frågar minnesintern cache för en pizza som matchar den angivna id parametern.

Kom ihåg att spara filen Controllers/PizzaController.cs innan du fortsätter.

Skapa och kör det färdiga webb-API:et

Skapa och starta webb-API:et genom att köra följande kommando:

dotnet run

Testa det färdiga webb-API:et med HTTP-filer

  1. Öppna filen ContosoPizza.http igen.

  2. Gör en POST begäran om att lägga till en ny pizza i HttpRepl med hjälp av följande kommando:

    POST {{ContosoPizza_HostAddress}}/pizza/
    Content-Type: application/json
    
    {
        "name": "Hawaii",
        "isGlutenFree": false
    }
    
    ###
    

    Föregående kommando returnerar den nyligen skapade pizzan:

    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
    }
    
  3. Uppdatera den nya Hawaii pizzan till en Hawaiian pizza med en PUT begäran med hjälp av följande kommando:

    PUT {{ContosoPizza_HostAddress}}/pizza/3
    Content-Type: application/json
    
    {
        "id": 3,
        "name": "Hawaiian",
        "isGlutenFree": false
    }
    
    ###
    

    Föregående kommando returnerar följande utdata som indikerar att det lyckades:

    HTTP/1.1 204 No Content
    Connection: close
    Date: Wed, 17 Jan 2024 17:07:30 GMT
    Server: Kestrel
    

    Kontrollera att pizzan har uppdaterats genom att köra GET åtgärden igen med hjälp av följande kommando:

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

    Föregående kommando returnerar den nyligen uppdaterade pizzan:

    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
    }
    
  4. Vårt API kan också ta bort den nyligen skapade pizzan genom åtgärden DELETE om du kör följande kommando:

    DELETE {{ContosoPizza_HostAddress}}/pizza/3
    
    ###
    

    Föregående kommando returnerar ett 204 No Content resultat för lyckat resultat:

    HTTP/1.1 204 No Content
    Date: Fri, 02 Apr 2021 23:30:04 GMT
    Server: Kestrel
    

    Kontrollera att pizzan har tagits bort genom att köra GET åtgärden igen med hjälp av följande kommando:

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

    Föregående kommando returnerar de ursprungliga pizzorna som resultat:

    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
        }
    ]
    

Nu är du klar med att implementera och testa ett nyligen skapat webb-API som skapats med ASP.NET Core.

Valfritt: Testa det färdiga webb-API:et med kommandoraden HTTPREPL

  1. Öppna den befintliga httprepl terminalen igen eller öppna en ny integrerad terminal från Visual Studio Code genom att välja Terminal>Ny terminal på huvudmenyn.

  2. Om du öppnade en ny terminal ansluter du till webb-API:et genom att köra följande kommando:

    httprepl https://localhost:{PORT}
    

    Du kan också köra följande kommando när som helst medan HttpRepl det körs:

    connect https://localhost:{PORT}
    
  3. Gå till slutpunkten genom att Pizza köra följande kommando:

    cd Pizza
    
  4. Kör följande kommando för att se de nya åtgärderna i Pizza-API:et:

    ls
    

    Föregående kommando visar utdata från tillgängliga API:er för Pizza slutpunkten:

        https://localhost:{PORT}/Pizza> ls
        .      [GET|POST]
        ..     []
        {id}   [GET|PUT|DELETE]
    
  5. Gör en POST begäran om att lägga till en ny pizza i HttpRepl med hjälp av följande kommando:

    post -c "{"name":"Hawaii", "isGlutenFree":false}"
    

    Föregående kommando returnerar den nyligen skapade pizzan:

    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
    }
    
  6. Uppdatera den nya Hawaii pizzan till en Hawaiian pizza med en PUT begäran med hjälp av följande kommando:

    put 3 -c  "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"
    

    Föregående kommando returnerar följande utdata som indikerar att det lyckades:

    HTTP/1.1 204 No Content
    Date: Fri, 02 Apr 2021 23:23:55 GMT
    Server: Kestrel
    

    Kontrollera att pizzan har uppdaterats genom att köra GET åtgärden igen med hjälp av följande kommando:

    get 3
    

    Föregående kommando returnerar den nyligen uppdaterade pizzan:

    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
    }
    
  7. Vårt API kan också ta bort den nyligen skapade pizzan genom åtgärden DELETE om du kör följande kommando:

    delete 3
    

    Föregående kommando returnerar ett 204 No Content resultat för lyckat resultat:

    HTTP/1.1 204 No Content
    Date: Fri, 02 Apr 2021 23:30:04 GMT
    Server: Kestrel
    

    Kontrollera att pizzan har tagits bort genom att köra GET åtgärden igen med hjälp av följande kommando:

    get
    

    Föregående kommando returnerar de ursprungliga pizzorna som resultat:

    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
        }
    ]
    

Nu är du klar med att implementera och testa ett nyligen skapat webb-API som skapats med ASP.NET Core.