Можно ли обрабатывать исключения ActionFilter с помощью механизма [HandleError]? - PullRequest
2 голосов
/ 12 сентября 2011

В моем приложении ASP.NET MVC 3 есть фильтр настраиваемых действий (AuthenticateAttribute), который гарантирует, что пользователи вошли в систему.

Я хочу вызывать исключения в методе OnActionExecuting и хотел бы, чтобы они обрабатывалисьс помощью глобального фильтра HandleError.Возможно ли это, и если да, то как мне это сделать?

В настоящее время повышение исключения в OnActionExecuting обходит глобальный фильтр HandleError - предположительно потому, что он перехватывает только исключения, возникающие внутри действия iself.

1 Ответ

2 голосов
/ 12 сентября 2011

Исключения, выброшенные в OnActionExecuting, будут обрабатываться глобальным HandleErrorAttribute. Вам просто нужно убедиться, что в вашем файле web.config он включен:

<customErrors mode="On" />

Говорят, что вы говорили о AuthenticateAttribute и OnActionExecuting событии. Эти два понятия несовместимы. Если вы пишете пользовательский атрибут авторизации, вы, вероятно, должны извлечь из AuthorizeAttribute и переопределить метод AuthorizeCore для аутентификации и метод HandleUnauthorizedRequest для обработки неавторизованного случая.

У вас также есть возможность, если вы не хотите использовать глобальный HandleErrorAttribute для выполнения следующих действий вместо создания исключений:

filterContext.Result = new ViewResult
{
    ViewName = "~/Views/Shared/401.cshtml"
};

Установка результата внутри атрибута действия приведет к короткому замыканию при выполнении действия контроллера и непосредственно отобразит представление.

...