2010-06-10 24 views
5

Ich versuche, die Fehlerbehandlung in einer Anwendung, die ich unterstütze, zu überarbeiten und zu vereinfachen. Wir haben derzeit alle unsere Seiten von einer von uns erstellten Basisklasse geerbt, die wiederum offensichtlich von System.Web.UI.Page erbt. Innerhalb dieser Basisklasse wird die OnError-Methode derzeit überschrieben, und ruft MyBase.OnError auf, und ruft dann eine unserer benutzerdefinierten Protokollierungsmethoden auf.Wann OnError überschreiben?

Ich sehe keinen Vorteil des Überschreibens der OnError-Methode, und ich denke, es wäre besser, die Application_Error-Methode in der Global.asax kümmern sich um die unbehandelte Ausnahme (Protokollierung) und dann den Abschnitt customErrors in Die Konfiguration würde einen Prozess auslösen, um den Benutzer umzuleiten.

On-line sieht es aus wie Leute, die diese Methode ziemlich häufig überschreiben, aber ich sehe keine Notwendigkeit, und this Artikel von MSDN lässt mich dasselbe denken.

Antwort

2

ich erstellen Sie eine benutzerdefinierte Klasse namens PageBase:

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

Und so habe ich nur einmal zu tun, und dass Fehler abzufangen unhandled verwenden und auf die Fehlerseite umleiten. So muss ich es einmal machen; Ich weiß nicht, dass das Page.Error-Ereignis irgendwelche Vor- oder Nachteile gegenüber einem Anwendungsfehler hat; aber ich benutze den Seitenfehler, wie es hier bequem sein kann; Ich kann den Fehler löschen und auf die Fehlerseite im Kontext der Seite umleiten ... meine persönliche Vorliebe.

Danke für die MSDN-Verbindung; das war eine ziemlich gute Ressource.

HTH.

+0

Aber noch einmal, warum die OnError-Methode überschreiben? Wenn Sie Informationen im Kontext der Seite verarbeiten müssen, verstehe ich, warum Sie den Fehler in diesem Kontext behandeln möchten (Protokollieren bestimmter Daten auf der Seite, Benutzereingaben, Anzeigen von Meldungen auf dem Bildschirm usw.), aber warum überschreiben die vorhandene OnError-Methode anstelle von Page_Error oder Application_Error? –

+0

page_error stammt von onerror (Page_Load wird von der OnLoad-Methode usw. aufgerufen), deshalb OnError; es ist das gleiche wie Page_Error ... Also die eigentliche Frage ist, warum Seitenfehler vs. App-Fehler ... –

+1

Mit dem Link, den ich oben zur Verfügung gestellt habe, erwähnt der Absatz über dem "global.asax: Application_Error" Abschnitt, dass Code in ein Die OnError Override-Methode ist nicht die gleiche wie die Verwendung von PageError. Also, in Ihrem Fall nehme ich an, dass Sie diese Funktionalität übersteuern, um auf eigene Faust umzuleiten, also ist es wahrscheinlich in Ordnung. In meinem Fall überschreiben wir diese Funktionalität in der OnError-Methode nicht wirklich. Wir führen lediglich eine sehr allgemeine Protokollierung der ausgelösten Ausnahme durch. Ich denke, wir könnten die Protokollierung auf die Anwendungsebene bringen und unsere OnError-Methode entfernen. Danke für deinen Beitrag. –

0

Ich könnte ein Szenario sehen, wo vielleicht nur einige Seiten in der Anwendung von der Basisklasse erben und Fehler anders behandeln müssen. Alle anderen Fehler werden von Application_Error abgefangen/protokolliert.

2

Ich habe die OnError-Methode nie überschrieben. Ich verwende gerne den Application_Error des globalen Asax, der wiederum alle Seiten erfasst, die möglicherweise nicht von Ihrer Basisklasse erben. Darüber hinaus wird das Überschreiben einer Methode verwendet, um ihre Funktionalität zu ändern. Wenn Sie dies nicht tun, würde ich sie nicht überschreiben.

Auch weiß ich, es ist nicht Teil Ihrer Frage, aber ich würde für die Fehlerprotokollierung bei ELMAH aussehen:

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

Verwandte Themen