C#MVC4项目:我想在会话到期时重定向到特定页面。
经过一些研究,我将以下代码添加到我项目中的Global.asax
:
protected void Session_End(object sender, EventArgs e)
{
Response.Redirect("Home/Index");
}
当会话过期时,会在Response.Redirect("Home/Index");
行The response is not available in this context
处抛出异常,说{{1}}
这里有什么问题?
答案 0 :(得分:25)
MVC中最简单的方法就是这样 如果会话过期,您必须在每个操作中检查其会话,如果它是null,则重定向到索引页面。
为此,您可以创建自定义属性,如下所示: -
这是覆盖ActionFilterAttribute的类。
public class SessionExpireAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
// check sessions here
if( HttpContext.Current.Session["username"] == null )
{
filterContext.Result = new RedirectResult("~/Home/Index");
return;
}
base.OnActionExecuting(filterContext);
}
}
然后在操作中添加此属性,如下所示:
[SessionExpire]
public ActionResult Index()
{
return Index();
}
或者只需将属性添加一次:
[SessionExpire]
public class HomeController : Controller
{
public ActionResult Index()
{
return Index();
}
}
答案 1 :(得分:0)
这是MVC中的一些新功能。
Public class SessionAuthorizeAttribute : AuthorizeAttribute
{
Protected override void HandleUnauthorizeRequest(
AuthorizationContext filtercontext )
{
filtercontext.Result = new RedirectResult("~/Login/Index");
}
}
在控制器上将此过滤器应用于要应用授权的过滤器。
[SessionAuthorize]
public class HomeController : Controller
{
// Something awesome here.
}
以上SessionAuthorizeAttribute的HandleUnAuthorizeRequest函数只会在授权失败后调用,而不是反复检查授权。
此致 MK
答案 2 :(得分:0)
创建此动作过滤器类
class SessionExpireAttribute : ActionFilterAttribute {
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.HttpContext.Session["logged"] == null)
{
filterContext.Result = new RedirectResult("/Account/Login");
}
base.OnActionExecuted(filterContext);
}
然后在下面的类或方法中使用它
[SessionExpireAttribute]
public class MyController : Controller
{
....
}