Перенаправление в OnActionExecuting FileAttribute не работает должным образом - PullRequest
0 голосов
/ 03 февраля 2010

У меня есть действие под названием EditProfile. Для обеспечения безопасности я добавил класс RequireUserLogin, унаследованный от ActionFilterAttribute. В OnActionExecuting, когда я перенаправляю пользователя на страницу входа, перед переходом на страницу входа сначала выполняется код действия EditProfile (, которого я не ожидаю ), а затем перенаправляем пользователя на вход стр. Я хочу не вступать в действие кода. В настоящее время единственный вариант, который у меня есть, это исключение исключения. Есть ли другие варианты? Код:

public class RequireUserLogin : ActionFilterAttribute
    {       
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            if (string.IsNullOrEmpty(userID))
            {
                filterContext.HttpContext.Response.Redirect("http://localhost/test/login");
            }
            base.OnActionExecuting(filterContext);

}

Действие EditProfile:

[RequireUserLogin()]
public ActionResult EditProfile()
{
  ....
}

1 Ответ

2 голосов
/ 03 февраля 2010

Фильтры авторизации не должны быть написаны как фильтры обычного действия, так как они проходят через другой путь кода.В этом случае рекомендуется создать подкласс AuthorizeAttribute и переопределить методы AuthorizeCore () и HandleUnauthorizedRequest ().

В AuthorizeCore () вернуть true, если UserID в порядке, в противном случае вернуть false.

В HandleUnauthorizedRequest(), установите filterContext.Result = new RedirectResult (...).Это приведет к короткому замыканию при вызове действия, и среда автоматически перенаправит в случае необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...