2010-02-03 52 views
0

我有一個叫做EditProfile的操作。爲了安全它,我添加了一個類RequireUserLogin繼承自ActionFilterAttribute。在OnActionExecuting中,當我將用戶重定向到登錄頁面時,在登錄頁面前,它首先執行EditProfile動作代碼(,我不指望),並將用戶重定向到登錄頁面。我不想採取行動代碼。目前我唯一的選擇是拋出異常。有沒有其他的選擇。該代碼是:在FileAttribute的OnAction中重定向執行不正常工作

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()中,如果UserID是OK,則返回true,否則返回false。

在HandleUnauthorizedRequest()中,設置filterContext.Result = new RedirectResult(...)。這將短路動作調用,並且框架將根據需要自動重定向。

+0

而不是Response.Redirect,我用RedirectResult,它工作正常。 – Adeel 2010-02-03 07:19:47