Ответ.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 4

3 ответа:

Видя, что ваш базовый класс наследуется от System.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница, вам не нужно использовать HttpContext. Попробуйте без него и посмотрите, поможет ли это.

EDIT : добавлена проверка страницы вокруг ответа.перенаправление

if (!Request.Url.AbsolutePath.ToLower().Contains("main.aspx"))
{
    Response.Redirect("<URL>", false);
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}

Я не думаю, что это именно то, что вы ищете, но, возможно, это сработает:

Server.Transfer("<URL>")

Я боролся с той же проблемой, но на 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, но это может дать идею использования чего-то еще, кроме ответа.Перенаправлять.