Response.Redirect () не работает - PullRequest
       21

Response.Redirect () не работает

4 голосов
/ 12 августа 2011

У меня есть страница Default.aspx, которая наследуется от BasePage.cs, которая наследуется от System.Web.UI.Page.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.Current.Response.Redirect ("Main.aspx", true);

Я хочу, чтобы редирект прекратил выполнение BasePage и немедленно выпрыгнул.Проблема в том, что это не так.

Когда я запускаю в режиме отладки, он проходит шаг за шагом, как будто он не просто перенаправляет и уходит.Как я могу безопасно перенаправить?

Ответы [ 4 ]

4 голосов
/ 12 августа 2011

Видя, что ваш базовый класс наследуется от System.Web.UI.Page, вам не нужно использовать HttpContext.Попробуйте это без, и посмотрите, поможет ли это.

РЕДАКТИРОВАТЬ : Добавлена ​​проверка страницы вокруг response.redirect

if (!Request.Url.AbsolutePath.ToLower().Contains("main.aspx"))
{
    Response.Redirect("<URL>", false);
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}
1 голос
/ 16 ноября 2012

Я боролся с той же проблемой, но на Asp.Net MVC 3.0. Response.Redirect просто не работал, поэтому я нашел простой способ использовать метод RedirectToAction, который можно унаследовать от Controller.

 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, но это может дать представление об использовании чего-то другого, кроме Response.Redirect.

1 голос
/ 12 августа 2011

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

Server.Transfer("<URL>")
0 голосов
/ 25 марта 2019

иногда на вашей странице появляется ошибка, и вы ее не видите пожалуйста, проверьте этот код ниже

HttpContext.Current.ClearError (); HttpContext.Current.Response.Redirect ("URL-адрес назначения", false);

...