2011-05-13 110 views
2

我有被覆蓋的OnActionExecuting方法(來檢查之前,如果用戶登錄在行動執行)ASP.NET MVC 3 OnActionExecuting導致無限循環

public class AuthenticationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      string redirectUrl = string.Format("?returnUrl={0}", filterContext.HttpContext.Request.Url.PathAndQuery); 

      filterContext.HttpContext.Response.Redirect(FormsAuthentication.LoginUrl + redirectUrl, true); 
     } 
     else 
      base.OnActionExecuting(filterContext); 
    } 
} 

爲什麼 - 如果用戶沒有登錄 - 響應被重定向再次向該方法。爲什麼?

回答

3

這可能是因爲您重定向到的控制器操作(我認爲的登錄網址)也使用此屬性進行了修飾。所以如果用戶沒有通過身份驗證,他會被重定向到登錄操作,並且因爲他沒有通過身份驗證,他會被重定向到登錄操作等等。就個人而言,我會建議您使用[Authorize]屬性,而不是編寫這樣的動作過濾器。

+0

但是如果我在控制器上使用[Authorize]屬性,結果是一個空白頁面(URL被正確更改) – Tony 2011-05-13 10:03:34

+2

@Tony,authorize屬性將自動重定向到您在''部分定義的登錄頁面你的web.config。因此,請確保在那裏定義的url對應於應用程序中的實際控制器操作。 – 2011-05-13 10:23:00