ExceptionContext.ExceptionHandled zmienia się na true. Gdzie jest obsługiwany wyjątek?
Używam globalnego filtru akcji do obsługi i rejestrowania wszystkich wyjątków.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahHandleErrorAttribute());
filters.Add(new HandleErrorAttribute());
}
Oto jak działa globalny filtr akcjiElmahHandleErrorAttribute
jest zdefiniowane - zastępujeOnException
metoda.
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
}
}
...
}
Nie rozumiem, dlaczego wartośćcontext.ExceptionHandled
jest prawdą, gdyOnException
metoda wykonywana. W jaki sposób jest obsługiwany ten wyjątek?
-EDYTOWAĆ- mamcustomErrors
sekcja wWeb.Config
. mamErrorController
klasa i akcje wywoływaneGeneral
iHttp404
.
<customErrors mode ="On" defaultRedirect="Error/General">
<error statusCode="404" redirect="Error/Http404"/>
</customErrors>
Nie rozumiem jednak działania kontroleraGeneral
nie jest wykonywany (punkt przerwania nigdy nie jest trafiany), ale wartośćExceptionContext.ExceptionHandled
jest ustawiona na true, gdyOnException
metodaElmahHandleErrorAttribute
rozpoczyna wykonywanie.