2

如果用户会话超时,我正在尝试在我的 BaseController 中使用 OnActionExecuting 来处理重定向到登录屏幕。但是,即使在我登录之前,它也会导致无限重定向-任何人都可以建议如何解决这个问题吗?

所以在我的基本控制器中,我有以下内容:

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (SessionManager.Instance().GetUser() == null) 
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary {
                    { "Controller", "Home" },
                    { "Action", "LogOn" }
            });
        }

        base.OnActionExecuting(filterContext);
    }

所以基本上我有一个可以获取/设置用户等的会话管理器类 - 我知道问题在于 GetUser 也将为空,因为它仅在验证 LogOn 后使用我的 SetUser 方法设置。

但不是让我的其他控制器中的每个方法都进行如下检查:

public ActionResult SomeOtherMethod()
{
     if(SessionManager.Instance().GetUser() != null)
     {

             //Go Do Useful View stuff

     }
     else
     {
          //Redirect To Logon
     }

}

我想在基本控制器中使用 OnActionExcuting。但是因为它在 LogOn 页面上运行(因为它应该)我得到无限重定向,因为 GetUser 将始终为空?

有没有更好的方法来做到这一点

4

1 回答 1

3

也许你可以尝试这样的事情:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    string controllerName = filterContext.Controller.GetType().Name;
    string actionName = filterContext.ActionDescriptor.ActionName;

    if (SessionManager.Instance().GetUser() == null ) 
    {
        if(!controllerName.Equals(typeof(HomeController).Name,StringComparison.InvariantCultureIgnoreCase)
        || !actionName .Equals("LogOn",StringComparison.InvariantCultureIgnoreCase)))
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary {
                { "Controller", "Home" },
                { "Action", "LogOn" }
        });
    }

    base.OnActionExecuting(filterContext);
}
于 2013-02-21T11:15:44.593 回答