La gestione degli errori in ASP.NET MVC

di Mirko Pastorelli, in ASP.NET MVC, Architettura, IIS,

La gestione degli errori è di fondamentale importanza sia per garantire una corretta user experience all'interno delle nostre applicazioni, sia per fare in modo che i dettagli dell'eccezione che si è verificata a runtime non vengano esposti al pubblico, per ovvie ragioni di sicurezza. Questi dettagli, invece, dovranno venire in qualche modo loggati, così che possiamo diagnosticare il problema che si è verificato. ASP.NET MVC non ha un unico entry point tramite cui intercettare le eccezioni in maniera centralizzata, ma sfrutta diversi moduli interni ed esterni al framework, mettendoci a dispozione quindi diversi strumenti per raggiungere questo scopo:

  • Custom Error;
  • gli Http Error;
  • Exception Filter;
  • Proprietà AjaxOptions.OnFailure per le chiamate AJAX;
  • L'oggetto HttpStatusCodeResult.

Tuttavia questa varietà può apparentemente creare confusione su quale metodologia usare in determinati contesti. L'obiettivo di questo articolo è quello di analizzare ogni modulo che ASP.NET MVC utilizza, spiegando quando e perchè utilizzarli, in modo da fare chiarezza e riuscire a sfruttare, per ogni contesto, lo strumento più appropriato.

I custom error

I custom error sono una funzionalità inclusa in ASP.NET sin dalle primissime versioni e hanno lo scopo di visualizzare pagine personalizzate in corrispondenza di una particolare tipologia di errore. E' possibile configurarli aggiungendo un elemento customErrors nella sezione system.web all'interno del web.config:

<customErrors mode="On" redirectMode="ResponseRedirect">
  <error statusCode="500" redirect="~/Error.cshtml" />
  <error statusCode="404" redirect="~/404.cshtml" />
</customErrors>

Più nel dettaglio, tramite redirectMode possiamo specificare la modalità con cui deve essere effettuato il reindirizzamento: per le applicazioni ASP.NET MVC dobbiamo impostare obbligatoriamente impostare il valore ResponseRedirect, che fa uso del reindirizzamento tramite status code 302. ResponseRewrite, invece, sfrutta internamente Server.Transfer, che non è supportato in ASP.NET MVC e quindi solleva un errore a runtime; esso infatti necessita di una risorsa che si trova fisicamente sul disco, caratteristica che è in conflitto con il principio di funzionamento alla base di ASP.NET MVC, che invece si appoggia ai concetti di routing, controller e action.

In generale, i custom error devono sempre essere attivati, perché, come vedremo successivamente, sono propedeutici al corretto funzionamento degli exception filter.

Gli http error

Gli http error fanno parte di un modulo nativo di IIS chiamato CustomErrorModule totalmente disaccoppiato con ASP.NET. E' possibile integrare gli http error in ASP.NET aggiungendo un elemento httpErrors nella sezione system.webServer all'interno di web.config. Più nel dettaglio, per poter configurare una pagina di errore è necessario inserire un elemento error con un appropriato status code e la relativa pagina di errore, avendo cura di rimuovere la pagina utilizzata di default utilizzata da IIS.

<system.webServer>
  <httpErrors existingResponse="Replace" defaultResponseMode="ExecuteURL">
    <remove statusCode="400"/>
    <error statusCode="400" path="/Error/Bad" responseMode="ExecuteURL"/>
  </httpErrors>
</system.webServer>

La proprietà responseMode deve essere configurata in base al tipo di pagina di errore che vogliamo visualizzare:

  • Se viene settata su File, la pagina di errore deve trovarsi sul server dell'applicazione ed essere una normale pagina HTML statica;
  • Se dobbiamo visualizzare una pagine contenuta in un altro server, dobbiamo invece sfruttare la modalità Redirect e fornire un URL assoluto;
  • Se dobbiamo eseguire un contenuto dinamico, come una pagina ASP.NET MVC o Web Forms, dobbiamo impostare ExecuteURL e fornire un indirizzo relativo, sullo stesso server.

Come già accennato, gli http error sono un modulo di IIS integrabile in ASP.NET. Il loro vantaggio è che possono intercettare tutte le richieste, anche quelle che non passano per ASP.NET, e di sostituirle con pagine di errore personalizzate.

4 pagine in totale: 1 2 3 4
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc