Перенаправление на определенную страницу после окончания сессии (MVC4)
Проект С# 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
Самый простой способ в MVC - это то, что
В случае окончания сеанса в каждом действии вы должны проверить его сеанс, а если он равен нулю, перенаправите его на страницу индекса.
С этой целью вы можете создать настраиваемый атрибут, как показано: -
Вот класс, который переопределяет 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();
}
}
Ответ 2
Это что-то новое в 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 функция будет вызываться только после неудачной авторизации вместо неоднократной проверки на авторизацию.
С уважением МК
Ответ 3
создать этот класс фильтра действий
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
{
....
}