gpt4 book ai didi

c# - OnActionExecuting 导致无限重定向以处理 session 超时

转载 作者:行者123 更新时间:2023-11-30 22:20:25 25 4
gpt4 key购买 nike

如果用户 session 超时,我正在尝试在我的 BaseController 中使用 OnActionExecuting 来处理重定向到登录屏幕。然而,它甚至在我登录之前就导致无限重定向 - 谁能建议如何解决这个问题?

所以在我的 Base Controller 中我有以下内容:

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

base.OnActionExecuting(filterContext);
}

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

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

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

//Go Do Useful View stuff

}
else
{
//Redirect To Logon
}

}

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

有没有更好的办法

最佳答案

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

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

关于c# - OnActionExecuting 导致无限重定向以处理 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15000322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com