This article has been localized into Italian by the community.
Action Results
Nell'articolo precedente, abbiamo parlato delle Actions, ovvero dei metodi definiti da un Controller. Le Actions sono richiamate quando, a fronte di un URL richiesto, viene trovata e abbinata una Action in un Controller (e questo è fatto dal sistema di Routing). Quando la Action (il metodo) termina il suo lavoro, è solita ritornare qualcosa al client che ha originato la richiesta. E quel "qualcosa" di solito implementa l'interfaccia IActionResult (o la Task<IActionResult> se il metodo è asincrono).
Dal momento che il vostro Controller eredita la classe predefinita Controller (Microsoft.AspNetCore.Mvc.Controller), abbiamo a disposizione un numero molto vasto di metodi di supporto per generare la risposta (il risultato dell'azione). Un esempio di questi metodi di supporto è già stato utilizzato in questa guida: Il metodo View(). Esso trova il file View che corrisponde all'azione e crea una instanza della classe ViewResult la quale implementa l'interfaccia IActionResult. Dopo di che, ASP.NET MVC trasformerà automaticamente il tutto in una "response" al browser - in questo caso nella forma di un codice di stato "OK" e quindi dal corpo HTML per la creazione della pagina sul browser.
Ma, una View non è il solo possibile risultato di una Action definita in un Controller. Poichè il risultato alla fine deve essere ritornato al browser, i metodi disponibili devono coprire tutti i possibili risultati di una request HTTP, pertanto una Action di un Controller può sicuramente produrre come risultato una "redirect", un 404 (Pagina non trovata) o uno qualsiasi degli altri possibili codici di stato HTTP. Questa è una lista incompleta dei metodi più interessanti ed utili che generano un Action Result:
- Content() - ritorna la stringa specificata come semplice testo al client (di solito un browser)
- View() - ritorna una View al client
- PartialView() - ritorna una Partial View (parleremo di questo in un altro punto di questa guida) al client
- File() - ritorna il contenuto di uno specifico file al client
- Json() - ritorna una risposta JSON al client
- Redirect() e RedirectPermanent() - ritornano una response redirect al browser (temporanea o permanente), inviando l'utente su un altro URL
- StatusCode() - ritorna un codice di stato personalizzato al client
C'è ne sono molti altri e naturalmente siete liberi di implementarne di vostri o generare il risultato voi stessi - la maggior parte di questi metodi, semplicemente genera la classe richiesta con le proprietà impostate com da richiesta. Per esempio, il metodo Content() semplicemente genera un istanza della classe ContentResult e valorizza la property Content con il valore che passate al metodo.
Poichè ci sono molti tipi di risposta che implementano l'interfaccia IActionResult, le vostre Actions possono utilizzarne una qualsiasi in base alla logica del vostro metodo. Un case comune di uso è quello di ritornare una View o un errore 404 (Pagina non trovata) se il contenuto cercato non viene trovato. Potrebbe essere qualcosa di simile a questo:
public IActionResult Details(int id)
{
Product product = GetProduct(id);
if (product != null)
return View(product);
return NotFound();
}
Nella prima linea, cerchiamo di caricare il prodotto richiesto, usando un metodo GetProduct() ancora da implementare. Se il prodotto viene trovato lo ritorniamo all'interno della View usando il metodo View() - se non lo troviamo ritorniamo un errore 404 usando il metodo di supporto NotFound() che crea una istanza della classe NotFoundResult. Pertanto, in questo caso, ci sono due possibili risultati per la Action, ma c'e ne potrebbero essere anche altri se necessario - siete liberi di ritornare qualsiasi cosa che implementi l'interfaccia IActionResult.
Riepilogo
Una Actionè un metodo presente in un Controller, solitamente accessibile per mezzo di un URL grazie al sistema di Routing. Una Action ritorna di solito un Action Result, basato sull'interfaccia IActionResult. Ci sono molti metodi di supporto per aiutarvi nel generare il risultato desiderato per la vostra Action. Questi sono gli aspetti più importanti per capire il funzionamento di un Controller ASP.NET MVC. Nei prossimi articoli andremo ancora un po più in profondità su alcuni argomenti avanzati relativi ai Controllers