我必须在mvc 5应用程序中的会话超时后重定向到主页。我使用以下代码:
public class SessionExpireAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var currentEnvironment = EnvironmentUtility.GetSession().Get<Environment>();
if (currentEnvironment == null)
{
filterContext.Result = new RedirectResult("~/Home/Index");
}
base.OnActionExecuting(filterContext);
}
}
在控制器中,我有以下代码:
[SessionExpire]
public ActionResult Submit()
{
var urlReferrer = this.Request.UrlReferrer;
if (urlReferrer != null)
{
return this.Redirect(urlReferrer.ToString());
}
else
{
return View();
}
}
点击提交按钮后,页面将使用javascript代码重定向到另一个页面,如下所示:
function commitButtonClickedHandler()
{
window.location.href = "@Url.Content("~/Working/NextPage")";
}
NextPage如下所示:
public ActionResult NextPage()
{
return this.View();
}
我的要求是在会话超时后,当您单击提交按钮时,它应该检查到期时间到期。如果它已过期,则应将其重定向到NextPage,就像在SessionExpireAttribute中一样。否则它应该继续该过程。但问题是在会话超时后,页面仍然重定向到NextPage()动作。请帮我解决这个问题。 谢谢。
答案 0 :(得分:0)
您可以通过覆盖OnActionExecuting
进行更改,如下所示:
public class SessionExpireAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if ( Session["SomeSession"] == null)
{
//ClearAllSessions
GoToLoginPage(filterContext, "You Session has been expired");
return;
}
}
private static void GoToLoginPage(ActionExecutingContext filterContext, string message)
{
try
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller", "controllerName" },
{ "action", "actionName" } ,
{ "Area","" },
{ "UnauthLogin",message },
});
}
}
catch
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller", "controllerName" },
{ "action", "actionName" } ,
{ "Area","" },
{ "UnauthLogin",message },
});
}
}
}