Azioni CRUD in ASP.NET Core

Completato

Il servizio pizza supporta le operazioni CRUD per un elenco di pizze. Queste operazioni vengono eseguite tramite verbi HTTP, di cui viene eseguito il mapping tramite attributi ASP.NET Core. Come si è osservato, il verbo HTTP GET viene usato per recuperare uno o più elementi da un servizio. L'azione è annotata con l'attributo [HttpGet].

La tabella seguente illustra il mapping delle quattro operazioni che vengono implementate per il servizio pizza:

Verbo di azione HTTP Operazione CRUD Attributo ASP.NET Core
GET Lettura [HttpGet]
POST Creazione [HttpPost]
PUT Update [HttpPut]
DELETE Delete [HttpDelete]

Si è già visto come funzionano le azioni GET. Ora verranno esaminate le azioni POST, PUT e DELETE.

POST

Per consentire agli utenti di aggiungere un nuovo elemento all'endpoint, è necessario implementare l'azione POST usando l'attributo [HttpPost]. Quando si passa l'elemento (in questo esempio, una pizza) al metodo come parametro, ASP.NET Core converte automaticamente qualsiasi applicazione/codice JSON inviato all'endpoint in un oggetto Pizza .NET popolato.

Ecco la firma del metodo Create che verrà implementato nella sezione successiva:

[HttpPost]
public IActionResult Create(Pizza pizza)
{            
    // This code will save the pizza and return a result
}

L'attributo [HttpPost] esegue il mapping delle richieste HTTP POST inviate a http://localhost:5000/pizza con il metodo Create(). Anziché restituire un elenco di pizze, come già osservato con il metodo Get(), questo metodo restituisce una risposta IActionResult.

IActionResult consente al client di sapere se la richiesta ha avuto esito positivo e fornisce l'ID della pizza appena creata. IActionResult usa codici di stato HTTP standard, quindi si integra facilmente con i client indipendentemente dal linguaggio o dalla piattaforma in cui vengono eseguiti.

ASP.NET Core
ASP.NET Core
Codice di stato HTTP Descrizione
CreatedAtAction 201 La pizza è stata aggiunta alla cache in memoria.
La pizza è inclusa nel corpo della risposta nel tipo di supporto definito nell'intestazione della richiesta HTTP accept (JSON per impostazione predefinita).
BadRequest è implicito 400 L'oggetto pizza del corpo della richiesta non è valido.

Fortunatamente, ControllerBase include metodi di utilità che creano automaticamente i codici di risposta HTTP e i messaggi appropriati. Il funzionamento di questo metodo verrà illustrato nell'esercizio successivo.

PUT

La modifica o l'aggiornamento di una pizza nell'inventario è simile al metodo POST implementato, ma usa l'attributo [HttpPut] e accetta il parametro id oltre all'oggetto Pizza che deve essere aggiornato:

[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
    // This code will update the pizza and return a result
}

Viene eseguito il mapping di ogni istanza di ActionResult usata nell'azione precedente al codice di stato HTTP corrispondente nella tabella seguente:

ASP.NET Core
ASP.NET Core
Codice di stato HTTP Descrizione
NoContent 204 La pizza è stata aggiornata nella cache in memoria.
BadRequest 400 Il valore Id del corpo della richiesta non corrisponde al valore id della route.
BadRequest è implicito 400 L'oggetto Pizza del corpo della richiesta non è valido.

DELETE

Una delle azioni più semplici da implementare è l'azione DELETE che accetta solo il parametro id della pizza da rimuovere dalla cache in memoria:

[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
    // This code will delete the pizza and return a result
}

Viene eseguito il mapping di ogni istanza di ActionResult usata nell'azione precedente al codice di stato HTTP corrispondente nella tabella seguente:

ASP.NET Core
ASP.NET Core
Codice di stato HTTP Descrizione
NoContent 204 La pizza è stata eliminata dalla cache in memoria.
NotFound 404 La cache in memoria non contiene una pizza corrispondente al parametro id specificato.

L'esercizio nell'unità seguente illustra come supportare ognuna delle quattro azioni nell'API Web.

Verificare le conoscenze

1.

Si supponga che sia necessario aggiornare il nome di un prodotto. Quale verbo di azione HTTP è il più adatto per questa richiesta?

2.

In quale scenario è più appropriato restituire un codice di stato HTTP 404 e come viene eseguita questa operazione in ASP.NET Core?