2010-06-10 8 views
5

Je cherche à retravailler et à simplifier la gestion des erreurs dans une application que je supporte. Actuellement, toutes nos pages héritent d'une classe de base que nous avons créée, qui à son tour hérite évidemment de System.Web.UI.Page. Dans cette classe de base, la méthode OnError est actuellement surchargée, et à son tour en appelant MyBase.OnError, puis en appelant l'une de nos méthodes de journalisation personnalisées.Quand remplacer OnError?

Je ne vois aucun intérêt à surcharger la méthode OnError, et je pense qu'il vaudrait mieux laisser la méthode Application_Error dans Global.asax s'occuper de l'exception non gérée (la consigner), puis la section customErrors dans la config déclencherait un processus pour rediriger l'utilisateur.

En regardant en ligne, il semble que les gens surchargent cette méthode assez souvent, mais je ne vois pas le besoin de l'article this de MSDN me fait penser la même chose.

Répondre

2

-je créer une classe personnalisée appelée PageBase:

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

Et donc je ne le faire une fois, et l'utiliser pour attraper des erreurs et unhandled rediriger vers la page d'erreur. De cette façon, je dois le faire une fois; Je ne sais pas que l'événement Page.Error a des avantages ou des inconvénients sur l'erreur d'application; mais j'utilise l'erreur de page car il peut être commode ici; Je peux effacer l'erreur et rediriger vers la page d'erreur juste dans le contexte de la page ... ma préférence personnelle.

Merci pour le lien MSDN; c'était une très bonne ressource.

HTH.

+0

Mais, encore une fois, pourquoi remplacer la méthode OnError? Si vous avez besoin de gérer les informations dans le contexte de la page, je comprends pourquoi vous voudriez gérer l'erreur dans ce contexte (consigner des données spécifiques sur la page, entrer l'utilisateur, afficher les messages sur l'écran, etc. la méthode OnError existante au lieu d'utiliser Page_Error ou Application_Error? –

+0

page_error provient de onerror (Page_Load est appelé à partir de la méthode OnLoad, etc.), c'est pourquoi OnError; c'est la même chose que Page_Error ... Donc la vraie question est pourquoi erreur de page vs erreur d'application ... –

+1

Avec le lien que j'ai fourni ci-dessus, le paragraphe au-dessus de la section "global.asax: Application_Error" mentionne que mettre du code dans un La méthode OnError Override n'est pas la même que l'utilisation de Page_Error. Donc, dans votre cas, je suppose que vous surchargez cette fonctionnalité pour la rediriger par vous-même, donc c'est probablement correct. Dans mon cas, nous ne remplaçons pas vraiment cette fonctionnalité dans la méthode OnError, nous faisons simplement une journalisation très générale à propos de l'exception qui a été lancée. Je pense que nous pourrions mettre la journalisation au niveau de l'application et supprimer notre méthode OnError. Merci pour votre contribution. –

0

Je pouvais voir un scénario où peut-être seulement quelques pages dans l'application héritent de la classe de base et ont besoin de gérer les erreurs différemment. Toutes les autres erreurs seraient interceptées/consignées par Application_Error

2

Je n'ai jamais redéfini la méthode OnError. J'aime utiliser l'Application_Error de l'asax global, qui à son tour attrapera toutes les pages qui pourraient ne pas hériter de votre classe de base. En outre, remplacer une méthode est utilisé pour changer sa fonctionnalité, donc si vous ne le faites pas, je ne le remplacerais pas.

Aussi, je sais que ce ne fait pas partie de votre question, mais je regarderais ELMAH pour l'enregistrement d'erreur:

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

Questions connexes