Dans une application Web MVC3, j'utilisais
public class MyHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext context) { // Write to log code base.OnException(context); } }
4 Réponses :
Vous pouvez créer un puis, au lieu d'enregistrer votre filtre avec le ifilterprovider code> qui vérifiera si le filtre a déjà été appliqué à cette action:
GlobalFilterCollection Code>, vous enregistrez votre fournisseur de filtres dans
Application_Start () CODE> P>
public class MyHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
if(context.ExceptionHandled) return;
// Write to log code
base.OnException(context);
context.ExceptionHandled = true;
}
}
Essayez ceci,
public class MyHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext context) { var exceptionHandled = context.ExceptionHandled; base.OnException(context); if(!exceptionHandled && context.ExceptionHandled) // log the error. } }
Je crois que j'ai trouvé une solution propre à cela moi-même. L'extension du guérison semblait être une bonne idée, mais maintenant je pense que c'était une étape dans la mauvaise direction. Je ne voulais pas gérer les erreurs différemment, écrivez simplement des exceptions à vous connecter une fois avant que le guérisseur les a choisis. Pour cette raison, le manuserror par défaut peut être laissé en place tel quel. Bien que OneXception puisse être appelée plusieurs fois, il semble être entièrement bénigné dans la mise en œuvre standard du guidonerrorattribute.
Au lieu de cela, j'ai créé un filtre de journalisation d'exception: P>
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new LoggedExceptionFilter()); filters.Add(new HandleErrorAttribute()); }
Bonjour, bonne solution, mais comment pouvez-vous obtenir plus d'informations de la source de l'exception comme le nom de la classe / de la méthode?
Je trouvais réellement la solution pour maintenir la méthode onexception de la cuisson deux fois. Si vous utilisez dans la méthode filterConfig.registerglobalfilters (), commencez le registre du guidonerraTtribute: En fait, j'ai également utilisé le guérisseur intégré sans l'enregistrer, et il travaillé bien. Il suffit d'avoir des erreurs personnalisées activées: p>
Peut-être devriez-vous relire la question. Il veut utiliser les deux en même temps.