Ich verwende einen globalen Aktionsfilter, um alle Ausnahmen zu behandeln und zu protokollieren. DieseExceptionContext.ExceptionHandled ändert sich in "true". Wo wird die Ausnahme behandelt?
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahHandleErrorAttribute());
filters.Add(new HandleErrorAttribute());
}
ist, wie die globalen Aktionsfilter ElmahHandleErrorAttribute
definiert - es überschreibt die OnException
Methode.
public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
//Is the exception handled already? context.ExceptionHandled seems to be true here
if (!context.IsChildAction && (context.HttpContext.IsCustomErrorEnabled))
{
//Do other stuff stuff
//Log to Elmah
}
}
...
}
Ich verstehe nicht, warum der Wert von context.ExceptionHandled
wahr ist, wenn die OnException
Methode ausführt. Wie wird diese Ausnahme behandelt?
-EDIT- Ich habe einen customErrors
Abschnitt im Web.Config
. Ich habe eine ErrorController
Klasse und Aktionen namens General
und Http404
.
<customErrors mode ="On" defaultRedirect="Error/General">
<error statusCode="404" redirect="Error/Http404"/>
</customErrors>
Was ich nicht verstehe, ist, die Controller-Aktion General
nicht ausgeführt wird (Haltepunkt getroffen wird nie), aber der Wert von ExceptionContext.ExceptionHandled
auf true gesetzt ist, wenn die OnException
Methode der ElmahHandleErrorAttribute
beginnt mit der Ausführung.
Ich kann 'context.ExceptionHandled' in Ihrem Code nicht sehen, wo ist es? – gdoron
@gdoron Ich habe den Check für context.ExceptionHandled entfernt.Es war früher in der Anweisung enthalten: 'if (! Context.IsChildAction &&! Context.ExceptionHandled && (context.HttpContext.IsCustomErrorEnabled))' – escist
Haben Sie die OnException-Methode des Controllers überschrieben? – gdoron