2010-06-10 10 views
5

Sto cercando di rielaborare e semplificare la gestione degli errori in un'applicazione che supporto. Al momento abbiamo tutte le nostre pagine che ereditano da una classe base che abbiamo creato, che a sua volta eredita ovviamente da System.Web.UI.Page. All'interno di questa classe base, il metodo OnError è attualmente sottoposto a override e, a sua volta, chiama MyBase.OnError e quindi chiama uno dei nostri metodi di registrazione personalizzati.Quando sovrascrivere OnError?

Non vedo alcun vantaggio di sovrascrivere il metodo OnError, e penso che sarebbe meglio lasciare che il metodo Application_Error nel Global.asax si occupi dell'eccezione non gestita (logging it) e quindi della sezione CustomErrors in la configurazione attiverebbe un processo per reindirizzare l'utente.

Guardando online sembra che le persone sovrascrivano questo metodo abbastanza frequentemente, ma non vedo la necessità di e l'articolo this da MSDN mi fa pensare lo stesso.

risposta

2

ho creare una classe personalizzata denominata PageBase:

public class PageBase : Page 
{ 
    protected override void OnError(..) 
    { 
    //handle error, redirect to error page 
    } 
} 

E quindi devo solo farlo una volta, e l'uso che per la cattura non gestita errori e reindirizzare alla pagina di errore. In questo modo devo farlo una volta; Non so che l'evento Page.Error ha qualche pro o contro sull'errore dell'applicazione; ma uso l'errore di pagina in quanto può essere conveniente qui; Posso cancellare l'errore e reindirizzare alla pagina di errore proprio all'interno del contesto della pagina ... la mia preferenza personale.

Grazie per il collegamento MSDN; quella era una buona risorsa.

HTH.

+0

Ma, ancora una volta, il motivo per cui l'override del metodo OnError? Se è necessario gestire le informazioni nel contesto della pagina, capisco perché si desidera gestire l'errore in tale contesto (registrazione di dati specifici sulla pagina, input dell'utente, visualizzazione dei messaggi sullo schermo, ecc.), Ma perché ignorare il metodo OnError esistente invece di usare Page_Error o Application_Error? –

+0

page_error deriva da onerror (Page_Load viene chiamato dal metodo OnLoad, ecc.), Ecco perché OnError; è la stessa di Page_Error ... Quindi la vera domanda è perché errore di pagina contro errore app ... –

+1

Con il link che ho fornito sopra, il paragrafo sopra la sezione "global.asax: Application_Error" menziona che mettere il codice in un Il metodo OnError Override non è uguale all'utilizzo di Page_Error. Quindi, nel tuo caso, suppongo tu stia ignorando quella funzionalità per reindirizzare da solo, quindi probabilmente è okay. Nel mio caso, non stiamo sovrascrivendo nessuna di queste funzionalità all'interno del metodo OnError, stiamo solo facendo un log molto generale sull'eccezione generata. Penso che potremmo mettere la registrazione a livello di applicazione e rimuovere il nostro metodo OnError. Grazie per il tuo contributo. –

0

Potrei vedere uno scenario in cui solo alcune pagine nell'applicazione ereditano dalla classe base e devono gestire gli errori in modo diverso. Tutti gli altri errori verrebbero rilevati/registrati da Application_Error

2

Non ho mai superato il metodo OnError. Mi piace usare l'Application_Error dell'asax globale, che a sua volta catturerà tutte le pagine che potrebbero non ereditare dalla tua classe base. Inoltre, sovrascrivendo viene usato un metodo per cambiarne la funzionalità, quindi se non lo fai non lo sovrascriverò.

Inoltre, io so che non è parte della tua domanda, ma vorrei guardare ELMAH per la registrazione degli errori:

http://code.google.com/p/elmah/

Problemi correlati