Как мне использовать [HandleError]
фильтр в asp.net MVC Preview 5?
Я установил customErrors в своем файле Web.config
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
и поместите [HandleError] над моим классом контроллера следующим образом:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Затем я позволяю своим контроллерам наследовать от этого класса и вызываю для них CrashTest (). Visual studio останавливается из-за ошибки, и после нажатия клавиши f5 для продолжения я перенаправляюсь на Error.aspx? Aspxerrorpath = / sxi.mvc / CrashTest (где sxi - это имя используемого контроллера. Конечно, путь не может быть найден, и я получаю «Ошибка сервера в приложении '/'.» 404.
Этот сайт был перенесен с предварительного просмотра 3 на 5. Все работает (не так уж много работы для переноса), кроме обработки ошибок. Когда я создаю полностью новый проект, обработка ошибок, похоже, работает.
Идеи?
- Примечание.
Поскольку сейчас у этого вопроса более 3000 просмотров, я подумал, что было бы полезно добавить то, что я использую сейчас (ASP.NET MVC 1.0). В проекте mvc contrib есть замечательный атрибут под названием "RescueAttribute", вам, наверное, тоже стоит его проверить;)
источник
RescueAttribute
источник: mvccontrib.codeplex.com/SourceControl/changeset/view/…Ответы:
Когда вы предоставляете своему классу (или методу действия) только атрибут HandleError, тогда при возникновении необработанного исключения MVC сначала будет искать соответствующее представление с именем «Ошибка» в папке представления контроллера. Если он не может найти его там, он продолжит поиск в папке общего просмотра (в которой по умолчанию должен быть файл Error.aspx).
Вы также можете складывать дополнительные атрибуты с конкретной информацией о типе исключения, которое вы ищете. На этом этапе вы можете направить ошибку в конкретное представление, отличное от представления по умолчанию «Ошибка».
Для получения дополнительной информации прочтите об этом сообщение в блоге Скотта Гатри .
источник
global.asax
как это , чтобы показать сообщение для пользователей?Также следует отметить, что ошибки, которые не устанавливают код ошибки http на 500
(например, UnauthorizedAccessException)
не будет обрабатываться фильтром HandleError.
источник
Решение для кода ошибки http на 500 это атрибут под названием [ERROR], поместите его в действие
//ПРИМЕР:
источник
Атрибуты в MVC очень полезны при обработке ошибок в методах get и post , они также отслеживают вызов ajax .
Создайте базовый контроллер в своем приложении и унаследуйте его в основном контроллере (EmployeeController).
открытый класс EmployeeController: BaseController
Добавьте ниже код в базовый контроллер.
================================================
Находит каталог: Root / App_Start / FilterConfig.cs
Добавьте ниже код:
Отследить ошибку AJAX:
Вызовите функцию CheckAJAXError при загрузке страницы макета.
источник
OnException
для обработки исключений» , но демонстрируете довольно плохую его реализацию.Вам не хватает Error.aspx :) В предварительном просмотре 5 он находится в папке Views / Shared. Просто скопируйте его из нового проекта Preview 5.
источник
}
источник