MVC Framework - Gestione delle eccezioni
In ASP.NET, la gestione degli errori viene eseguita utilizzando l'approccio try catch standard o utilizzando gli eventi dell'applicazione. ASP.NET MVC viene fornito con il supporto integrato per la gestione delle eccezioni tramite una funzionalità nota come filtri delle eccezioni. Impareremo due approcci qui: uno con l'override del metodo onException e un altro definendo i filtri HandleError.
Eseguire l'override del metodo OnException
Questo approccio viene utilizzato quando si desidera gestire tutte le eccezioni tra i metodi Action a livello di controller.
Per comprendere questo approccio, creare un'applicazione MVC (seguire i passaggi descritti nei capitoli precedenti). Ora aggiungi una nuova classe Controller e aggiungi il seguente codice che sovrascrive il metodo onException e genera esplicitamente un errore nel nostro metodo Action -
Ora creiamo una vista comune denominata Errorche verrà mostrato all'utente quando si verifica un'eccezione nell'applicazione. All'interno della cartella Visualizzazioni, creare una nuova cartella denominata Condivisa e aggiungere una nuova Visualizzazione denominata Errore.
Copia il seguente codice all'interno del nuovo Error.cshtml -
Se provi a eseguire l'applicazione ora, darà il seguente risultato. Il codice precedente esegue il rendering della visualizzazione degli errori quando si verifica un'eccezione in uno dei metodi di azione all'interno di questo controller.
Il vantaggio di questo approccio è che più azioni all'interno dello stesso controller possono condividere questa logica di gestione degli errori. Tuttavia, lo svantaggio è che non possiamo utilizzare la stessa logica di gestione degli errori su più controller.
Attributo HandleError
L'attributo HandleError è uno dei filtri di azione che abbiamo studiato nel capitolo Filtri e filtri di azione. HandleErrorAttribute è l'implementazione predefinita di IExceptionFilter. Questo filtro gestisce tutte le eccezioni sollevate dalle azioni, dai filtri e dalle visualizzazioni del controller.
Per utilizzare questa funzionalità, prima di tutto attiva la sezione customErrors in web.config. Apri web.config e inserisci il seguente codice all'interno di system.web e imposta il suo valore su On.
<customErrors mode = "On"/>
Abbiamo già creato la visualizzazione degli errori all'interno della cartella Condivisa in Visualizzazioni. Questa volta cambia il codice di questo file di visualizzazione come segue, per digitarlo in modo deciso con il modello HandleErrorInfo (che è presente in System.Web.MVC).
@model System.Web.Mvc.HandleErrorInfo
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width = device-width" />
<title>Error</title>
</head>
<body>
<h2>
Sorry, an error occurred while processing your request.
</h2>
<h2>Exception details</h2>
<p>
Controller: @Model.ControllerName <br>
Action: @Model.ActionName
Exception: @Model.Exception
</p>
</body>
</html>
Ora inserisci il seguente codice nel tuo file controller che specifica l'attributo [HandleError] nel file Controller.
using System;
using System.Data.Common;
using System.Web.Mvc;
namespace ExceptionHandlingMVC.Controllers {
[HandleError]
public class ExceptionHandlingController : Controller {
public ActionResult TestMethod() {
throw new Exception("Test Exception");
return View();
}
}
}
Se provi a eseguire l'applicazione ora, otterrai un errore simile a quello mostrato nello screenshot seguente.
Come puoi vedere, questa volta l'errore contiene ulteriori informazioni sul controller e sui dettagli relativi all'azione. In questo modo, HandleError può essere utilizzato a qualsiasi livello e tra i controller per gestire tali errori.