2010-02-03 6 views
0

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

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() 
{ 
    .... 
} 

ответ

2

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

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

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

+0

вместо Response.Redirect, я использовал RedirectResult, и он работает нормально. – Adeel

Смежные вопросы