В настоящее время у меня есть 2 фильтра, Auth и Redirect, которые выполняют следующие действия: Filter Auth, который реализует IAuthorizationFilter и ActionFilter, проверяет логин и авторизацию пользователя, а в случае неудачи устанавливает filterContext.Result равным HttpStatusCodeResult из 403 (запрещено ). Фильтр Redirect, который реализует IActionFilter и ActionFilter, проверяет Результат и, если это 403, перенаправляет на страницу входа.
Я применил их к действию следующим образом:
[Auth(Order=0)]
[Redirect(Order=1)]
Однако Auth выполняется, но Redirect никогда не выполняется (не один из 4 переопределяемых методов, которые он предоставляет). Если я удаляю Auth, Redirect выполняется, но если я включаю Auth в качестве первого фильтра, Redirect не выполняется. Я предполагаю, что установка свойства Result контекста фильтра предотвращает выполнение любых других фильтров, но я не могу понять, почему это происходит. К вашему сведению, я использую ASP.NET MVC 3 beta, но это ничего не должно изменить.
Обновление: изменение типа фильтра Auth на IActionFilter вместо IAuthorizationFilter приводит к срабатыванию OnResultExecuting и OnResultExecuted в Redirect, но изменение отклика там никак не влияет на окончательный ответ браузеру.