ASP.MVC атрибут HandleError не работает
Я знаю, что это общая проблема, но я просканировал многие дискуссии безрезультатно.
Я пытаюсь обрабатывать ошибки с помощью атрибута HandleError ASP.MVC. Я использую MVC 4.
Моя страница ошибок находится в Views / Shared / Error.cshtml и выглядит так:
Test error page
<hgroup class="title">
<h1 class="error">Error.</h1>
<h2 class="error">An error occurred while processing your request.</h2>
</hgroup>
Мой FilterConfig.cs в папке App-Start:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
Мой контроллер:
public class TestController : Controller
{
[HandleError(View = "Error")]
public ActionResult Index()
{
throw new Exception("oops");
}
}
И, наконец, мой Web.config имеет следующий узел:
<customErrors mode="On" defaultRedirect="Error">
</customErrors>
Когда я вызываю действие контроллера, я получаю белый экран со следующим текстом:
Ошибка сервера в приложении '/'Ошибка выполнения Описание: при обработке вашего запроса возникла исключительная ситуация. Кроме того, во время выполнения пользовательской страницы ошибок для первого исключения произошло другое исключение. Запрос был прекращен.
Если defaultRedirect = "Ошибка" не установлен в файле Web.config, я получаю желтый экран со следующим текстом:
Ошибка сервера в приложении '/'Ошибка выполнения Описание: на сервере произошла ошибка приложения. Текущие пользовательские настройки ошибок для этого приложения предотвращают просмотр сведений об ошибке приложения.
Подробно: Чтобы детали этого конкретного сообщения об ошибке можно было просматривать на локальном сервере, создайте тег в файле конфигурации «web.config», расположенном в корневом каталоге текущего веб-приложения. Для этого тега должен быть установлен атрибут «mode» «RemoteOnly». Чтобы детали были доступны для просмотра на удаленных компьютерах, установите для «mode» значение «Off».
Примечания: текущую страницу ошибок, которую вы видите, можно заменить пользовательской страницей ошибок, изменив атрибут defaultRedirect тега конфигурации приложения, чтобы он указывал на URL-адрес пользовательской страницы ошибок.
Кто-нибудь знает, что может быть не так?
РЕДАКТИРОВАТЬ:
Ошибки были вызваны использованием строго типизированного макета. Когда выдается ошибка, механизм обработки ошибок MVC создает объект HandleErrorInfo, который передается в представление Error. Однако если мы используем строго типизированный макет, типы не совпадают.
Решением в моем случае является использование метода Application_Error в Global.asax, который был прекрасно описан SBirthare ниже.