当ASP.Net MVC应用程序会话超时后,常见的问题是在用户再次尝试访问应用程序时会导致抛出异常。这是因为Session会话对象已经超时并被销毁了。解决该问题的方法是使用自定义Attribute,并在ASP.Net MVC控制器中使用该Attribute。这样,每次在控制器上调用前,都会先检查Session是否过期。如果Session已经过期,则必须重新定向到登录页面等等。
以下示例展示了如何编写自定义Attribute:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class SessionExpireAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
if (ctx.Session == null)
{
filterContext.Result = new RedirectResult("~/Account/Login");
return;
}
base.OnActionExecuting(filterContext);
}
}
在上面的示例中,我们定义了SessionExpireAttribute。此属性检查Session是否为null并定向到Login页面。我们将此属性应用于控制器中的各个操作。
[SessionExpire]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
在上面的示例中,SessionExpireAttribute应用于HomeController。
这样每次调用HomeController之前,都会检查Session是否超时。如果Session已经过期,则定向到登录页面。
有了上述解决方案,可以确保当ASP.Net MVC的Session过期时,应用程序将以更友好的方式向用户提供反馈。