Остановить ответ при проверке ActionFilterAttribute

У меня есть ActionFilterAttribute, и в его событии OnExecuting я проверяю запрос. И если это не авторизованный запрос, я делаю что-то вроде:

if(notAuthorized){
  filterContext.HttpContext.AddError(new Exception("Invalid Request !!"));
}

Таким образом, для неавторизованных запросов он добавляет исключение и продолжает выполнение действия. Мой вопрос в том, как остановить обработку в этот момент? Я пытался:

filterContext.HttpContext.Response.End();

но без успеха. Ответьте, пожалуйста.

Хотя проверка на наличие ошибок в действии будет вариантом, но я ищу изменение в самом фильтре действия, чтобы нам не нужно было вносить изменения в каждое действие.


person sovan    schedule 05.12.2013    source источник


Ответы (1)


Просто установите Result из filterContext:

filterContext.Result = new HttpUnauthorizedResult("Invalid Request !!");

Если вы хотите разрешить доступ только аутентифицированным пользователям, вам лучше использовать фильтр Authorize.

ОБНОВЛЕНИЕ:

Поскольку вы хотите отобразить ошибку View при неудачной авторизации, попробуйте следующее:

filterContext.Result = new ViewResult
        {
        ViewName = "{YourErrorViewName}",
        ViewData = { Model = new Exception("Invalid Request !!") }
        }; 
person haim770    schedule 05.12.2013
comment
Привет, я только что попробовал, и он вернул мне вид входа в систему. На самом деле, в этом случае я не должен возвращать представление входа в систему (это отдельный контроллер для другого набора пользователей, проверяющий с помощью cookie), вместо этого я мог бы захотеть показать представление ошибок. Спасибо за быстрый ответ. - person sovan; 05.12.2013