Azioni CRUD in ASP.NET Core
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.