Ответ.Redirect () не работает
У меня есть дефолт.страница aspx, которая наследуется от BasePage.КС, который наследует от системы.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница. BasePage-это место, где я проверяю, не истек ли тайм-аут сеанса. Когда сеанс истекает и пользователь нажимает на что-то, мне нужно перенаправить пользователя обратно в "Main.страница ASPX.
Вот код в моей базовой странице
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string cookie = Request.Headers["Cookie"];
if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))
{
HttpContext.Current.Response.Redirect("Main.aspx", true);
return;
}
}
}
}
HttpContext.Текущий.Ответ.Перенаправление("Главная.aspx", true);
Я хочу, чтобы редирект остановил выполнение BasePage и немедленно выскочил. То проблема в том, что это не так.
Когда я запускаю в режиме отладки, он продолжает шагать, как будто он не просто перенаправляет и уходит. Как я могу безопасно перенаправить?
3 ответа:
Видя, что ваш базовый класс наследуется от System.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница, вам не нужно использовать HttpContext. Попробуйте без него и посмотрите, поможет ли это.
EDIT : добавлена проверка страницы вокруг ответа.перенаправление
if (!Request.Url.AbsolutePath.ToLower().Contains("main.aspx")) { Response.Redirect("<URL>", false); HttpContext.Current.ApplicationInstance.CompleteRequest(); }
Я боролся с той же проблемой, но на Asp.Net MVC 3.0. Ответ.Редирект просто не работал, поэтому я нашел простой способ использовать метод RedirectToAction, который может быть унаследован от контроллера.
public class SessionExpireFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContext context = HttpContext.Current; if (context.Session != null) // check if session is supported { if (context.Session.IsNewSession) // if it says it is a new session, but exisitng cookie exists that means session expired { string sessionCookie = context.Request.Headers["Cookie"]; if ((sessionCookie != null) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)) { string redirectTo = "~/Account/Expired"; filterContext.Result = new RedirectResult(redirectTo); } } else { base.OnActionExecuting(filterContext); } } } }
Это прекрасно работает для Asp.Net MVC, но это может дать идею использования чего-то еще, кроме ответа.Перенаправлять.