2013-01-18 80 views
1

在MVC 3使用C#我想重定向某些未驗證的方法。然而,這似乎並不像它的工作:如何重定向在C#

private ActionResult m_VerifyLogin() 
    { 
     if (Session["isLogged"] == null || (int)Session["isLogged"] != 1) 
     { 
      return RedirectToAction("Index", "Home"); 
     } 

     return View(); 
    } 

有誰知道我能做什麼?即使我創建了ActionFilterAttribute,我也希望它非常簡單!

- 編輯 -

謝謝你所有的答案傢伙。我們嘗試了一些你問什麼,然後我們測試後想出了這一點:

定製ActionFilterAttribute:

public class IsLoggedAttribute : ActionFilterAttribute 
{ 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.Session["isLogged"] == null || (int) filterContext.HttpContext.Session["isLogged"] != 1) 
     { 
      filterContext.HttpContext.Response.RedirectToRoute(new { controller = "Home" }); 
     } 

     base.OnActionExecuting(filterContext); 
    } 

} 

而且我可以在上面路由的方法拋出[IsLogged。

+3

這是「不工作」?一定要告訴! –

+1

爲什麼它不工作?怎麼了? – SLaks

+0

您是否嘗試過調試以查看它是否是您的'Return RedirectToAction'行代碼..? – MethodMan

回答

5

使你的行動方法public。您的代碼看起來不錯,因爲重定向到另一個操作/控制器,操作方法可能會從Controller基類中返回RedirectToAction方法。

public ActionResult m_VerifyLogin() 
{ 
    if (Session["isLogged"] != null || (int)Session["isLogged"] != 1) 
    { 
     return RedirectToAction("Index", "Home"); 
    } 
    return View(); 
} 

您的if聲明也有點奇怪。您檢查會話中的值是否爲空,並且邏輯運算符爲OR,您也會將其轉換爲(可能爲空)以使用值進行測試。你可以嘗試做這樣的事情:

//If session value is not null then try to cast to int and check if it is not 1. 
if (Session["isLogged"] != null || (int)Session["isLogged"] != 1) 

如果Home控制器Index動作有施加ActionFilterAttribute,這是當前用戶無效,你會得到一個重定向到登錄的窗體身份驗證的配置定義的頁面。您還可以使用更好的名稱的操作方法名稱來獲得友好的網址,如VerifyLogin

public ActionResult VerifyLogin() 
{ 
    if (Session["isLogged"] != null || (int)Session["isLogged"] != 1) 
    { 
     return RedirectToAction("Index", "Home"); 
    } 
    return View(); 
} 
+0

但我沒有使用這個作爲URL調用,所以我可以在我的ActionResults裏面彈出一個函數,比如Index,Dashboard,我只需調用m_VerifyLogin(); – JREAM

+0

'm_Something'已經是非C#約定。 +1爲整個答案。 –

+0

我在我的awnser中添加了一些提示。如果你有一個私有方法,你不會得到一個有效的路由到這個操作方法,因爲它是私有的。如.Net Framework中的類,控制器是類,它具有訪問修飾符。 –

2

RedirectToAction()返回RedirectToRouteResult對象,告訴MVC當你從你的行動寄回發送重定向。

在不使用返回值的情況下調用該方法將不會執行任何操作。

您需要從操作本身返回私有方法的結果。