) Я использую глобальный фильтр действий для обработки и регистрации всех исключений.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahHandleErrorAttribute());
filters.Add(new HandleErrorAttribute());
}
Вот как работает глобальный фильтр действий Определен ElmahHandleErrorAttribute
- он переопределяет метод OnException
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
}
}
...
}
Я не понимаю, почему значение context.ExceptionHandled
имеет значение true, когда выполняется метод OnException
.
Как обрабатывается это исключение?
-РЕДАКТИРОВАТЬ-
У меня есть раздел customErrors
в Web.Config
. У меня есть класс ErrorController
и действия с именами General
и Http404
.
<customErrors mode ="On" defaultRedirect="Error/General">
<error statusCode="404" redirect="Error/Http404"/>
</customErrors>
Чего я не понимаю, так это того, что действие контроллера General
не выполняется (точка останова никогда не срабатывает), но значение ExceptionContext.ExceptionHandled
устанавливается равным true, когда Начинает выполняться метод OnException
для ElmahHandleErrorAttribute
.