2011-08-12 68 views
4

我有Default.aspx頁面,它從繼承自System.Web.UI.Page的BasePage.cs繼承。 BasePage是我檢查會話是否超時的地方。當會話超時並且用戶點擊某些內容時,我需要將用戶重定向回「Main.aspx」頁面。Response.Redirect()不起作用

這裏是我的BasePage

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」,真)代碼;

我想重定向停止執行BasePage並立即跳出。問題是,事實並非如此。

當我在調試模式下運行時,它會逐步瀏覽,就像它不只是重定向和離開一樣。 如何安全重定向?

+2

我相信這是一個重複的問題。請參閱:http://stackoverflow.com/questions/372877/response-redirect-not-ending-execution – mikemanne

+0

我嘗試了http://stackoverflow.com/questions/372877/response-redirect-not-ending中提到的所有解決方案-執行。沒有工作。 – BumbleBee

+0

@BumbleBee這不是一個很好的理由來創建一個新的問題。 –

回答

4

看到您的基類繼承自System.Web.UI.Page,您不需要使用HttpContext。嘗試一下,看看它是否有幫助。

編輯:添加頁面檢查周圍的Response.Redirect

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

謝謝。我確實嘗試過,但問題仍然存在。 – BumbleBee

+0

您可以退回並省略endResponse參數,並查看它是否有任何區別。排除法。 –

+0

試過沒有成功。 – BumbleBee

1

我不認爲這是你在尋找什麼,但也許這會工作:

Server.Transfer("<URL>") 
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別的想法。