12

我在我的基本控制器類中初始化了方法,每當執行任何操作方法時都會調用它。在每個操作方法上,我想檢查我的會話,如果它是空的,它應該重定向到登錄頁面。重定向到來自基本控制器的操作方法

public class BaseController : Controller 
{ 
    protected IDataRepository _appData = new DataRepository(); 

    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     if (SessionFactory.CurrentAdminUser == null) 
     { 
      RedirectToLogin(); 
     } 
    } 
} 
public ActionResult RedirectToLogin() 
    { 
     return RedirectToAction("AdminLogin", "Admin"); 
    } 

它調用這個方法,但沒有重定向到管理登錄方法,並保持執行,並調用正在流動的方法,所以錯誤會來。

總之,我想檢查每當我的應用程序會話變爲空時,它應該重新登錄頁面,並且它不方便檢查所有methods.please建議我一些好方法。

回答

15

您打電話給RedirectToLogin,它只是返回一個沒有人使用的RedirectToActionResult,它不影響流程的流程。

試試這個:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    base.OnActionExecuting(); 

    if (SessionFactory.CurrentAdminUser == null) 
     filterContext.Result = new RedirectResult(Url.Action("AdminLogin", "Admin")); 
} 

或者,如果你堅持重寫Initialize

protected override void Initialize(RequestContext requestContext) 
{ 
    base.Initialize(requestContext); 

    if (SessionFactory.CurrentAdminUser == null) 
    { 
     requestContext.HttpContext.Response.Clear(); 
     requestContext.HttpContext.Response.Redirect(Url.Action("AdminLogin", "Admin")); 
     requestContext.HttpContext.Response.End(); 
    } 
} 

此外,檢查[Authorize]過濾器,能更好地滿足您的需求。請參閱here

+0

感謝您的建議,但我無法使用Url.Action。你能建議我需要爲Url.Action引用哪個程序集? – Silvia

+1

@Silvia,我認爲它是'System.Web.Mvc' – haim770

相關問題