2012-04-27 18 views
7

Sono consapevole che ci sono un sacco di domande in SO su Gestione degli errori in ASP.NET MVC.Vantaggi di [HandleError] su Application_Error

vedo, per lo più persone stanno cercando di realizzare le cose in tre modi:

  1. Creare un BaseController e sovrascrivere il metodo di OnException

  2. Utilizzando [HandleError] o eccezione personalizzata filtri.

  3. Application_Error evento in global.asax.cs

I primi due vie non in grado di gestire tutte le eccezioni e lo fanno solo che vengono generati dai metodi d'azione/filtri, quindi ovviamente il terzo è sarà l'approccio migliore per un gestore di eccezioni globale.

La mia domanda è perché dovrei optare per l'approccio [HandleError]? Quali vantaggi comporta che non riesca a superare Application_Error?

Infine, desidero prendere seriamente la sezione customErrors in un'applicazione MVC?

Nota: il mio requisito è normale. Ogni volta che si verifica un'eccezione, registrarla e restituire una pagina di errore personalizzata. La pagina di errore personalizzata può variare in base al codice di stato.

risposta

8

Il più ovvio è che [HandleError] consente di gestire gli errori in modo diverso in diversi controller e azioni. È molto più elegante di una sorta di istruzione switch nel tuo gestore Application_Error.

Un altro vantaggio è che [HandleError] ha ancora accesso al controller e tutta la bontà MVC che viene con esso, in modo da poter ancora restituire un View oppure chiamare un'altra azione. Una volta che cadi a Application_Error, hai perso ControllerContext e non hai davvero opzioni a te tranne per il reindirizzamento.

+1

Non vedo molti motivi per cui qualcuno voglia gestire gli errori in modo diverso nei vari controller e azioni. Ok, se faccio quella logica in [HandleError], di nuovo voglio farlo in global.asax giusto? – VJAI

+1

Pagina di errore diversa per dispositivi mobili? Pagina di errore personalizzata per gli utenti? Frammento Html per richieste Ajax? Immagine di errore personalizzata per collegamenti di immagine interrotti? Accedere alle pagine di errore vietate per determinati controller? Non è difficile pensare a ragioni per gestire gli errori in modo diverso. – bhamlin