Response.Redirect()不起作用

时间:2011-08-12 18:38:02

标签: asp.net session response.redirect

我有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 个答案:

答案 0 :(得分:4)

看到您的基类继承自System.Web.UI.Page,您不需要使用HttpContext。不用尝试,看看是否有帮助。

编辑:在response.redirect

附近添加了页面检查
if (!Request.Url.AbsolutePath.ToLower().Contains("main.aspx"))
{
    Response.Redirect("<URL>", false);
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}

答案 1 :(得分:1)

我认为这不是你想要的,但也许这会奏效:

Server.Transfer("<URL>")

答案 2 :(得分:1)

我在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之外的其他内容。

答案 3 :(得分:0)

有时您的页面有错误,您看不到它 请在下面检查此代码

HttpContext.Current.ClearError(); HttpContext.Current.Response.Redirect(“您的目标网址”,false);