OnActionExecuting曹景伟无限重定向处理会话超时(OnActionExecuting

2019-08-17 02:01发布

我试图用OnActionExecuting我BaseController处理重定向如果用户会话超时登录屏幕。 然而,它是造成无限的重定向我之前也得到记录在 - 任何人都可以就如何克服这个建议?

所以在我的基地控制器我有以下几点:

    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问题也将是空的,因为它只是用我的方法SETUSER设置登录已经通过验证后。

但是,而不是我有像检查其他控制器的每个方法:

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

             //Go Do Useful View stuff

     }
     else
     {
          //Redirect To Logon
     }

}

我想在基本控制器使用OnActionExcuting。 但由于它是在登录页上运行(因为它应该)我越来越infinte redierct因为的getUser将永远是空?

是否有过这样一个更好的办法

Answer 1:

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

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);
}


文章来源: OnActionExecuting Causing Infinite Redirect for handling Session Timeout