2010-05-20 32 views
2

當我試圖通過Response.Redirect(URL)重定向到另一個頁面正在以下錯誤: - System.Web.HttpException: Cannot redirect after HTTP headers have been sent.不能重定向後HTTP標頭已被送往

我寫了一個Response.Write("Sometext");在調用重定向方法之前調用Response.Flush()

在這種情況下我們該如何使用Response.Redirect(URL)

我正在通過異步調用執行存儲過程。 SP將需要將近3分鐘才能執行。那時我會從服務器獲取負載平衡器超時錯誤,因爲此應用程序正在雲計算機中運行。爲了避免負載平衡器超時,我正在向瀏覽器寫入一些文本(response.write()Flush())。

+0

的[可能的複製爲什麼我收到「無法重定向後HTTP標頭已經發送「當我調用Response.Redirect()?](http://stackoverflow.com/questions/159523/why-do-i-get-cannot-redirect-after-http-headers-have-been-sent-when-我呼叫res) – 2017-03-22 06:32:33

回答

3

您需要確保在嘗試發送HTTP標頭之前,不要寫入/清除任何東西。 發送標題後有沒有合適的方式做一個重定向,因爲唯一可以做的事情是輸出JavaScript來做重定向(壞)或發送'meta刷新/位置'標籤,這很可能不會是在正確的位置(HEAD內),從而導致無效的HTML。

+0

我通過異步呼叫執行存儲過程。 SP將需要將近3分鐘才能執行。那時我會從服務器獲取負載平衡器超時錯誤,因爲此應用程序正在雲計算機中運行。 – Anilkumar 2010-05-20 05:39:36

0

你不能使用Response.Redirect,因爲你已經走過標題並寫出「Sometext」。在開始將數據寫入客戶端或進行META重定向之前,您必須檢查(重定向條件)。

如果您想要顯示文本並在5秒後重定向的頁面之一,您可以選擇META。

0

如果您在頁面呈現開始之前(例如,您從頁面的LoadPreRender事件重定向)重定向,則不會出現此錯誤。


我現在在您的評論中看到,您希望在長時間運行的存儲過程完成後重定向。在這種情況下,您可能需要使用不同的方法。

你可以在你的頁面上放一個例如AJAX UpdatePanelTimer,Timer可以每隔幾秒檢查存儲過程是否完成,然後進行重定向。

這種方法還有一個優點,即在程序運行時,您可以在頁面上放置一些「進行中」消息,以便您的用戶知道事情仍在發生。

2

我有相同的錯誤和相同的方法。您可能想嘗試使用JavaScript而不是直接調用Response.Redirect。

Response.Write("<script type='text/javascript'>"); 
Response.Write("window.location = '" + url + "'</script>"); 
Response.Flush(); 

工作很好,但我仍然需要檢查它在不同的瀏覽器。

0

儘量做到以下幾點:

catch (System.Threading.ThreadAbortException) 
     { 
      // To Handle HTTP Exception "Cannot redirect after HTTP headers have been sent". 
     } 
    catch (Exception e) 
     {//Here you can put your context.response.redirect("page.aspx");} 
0

對我來說,這個問題的原因是,在滾動GridView控件加載數據花費很長的時間。並沒有完全加載gridview數據之前,但我按下重定向按鈕。我得到這個錯誤。

可以減少您的數據得到

之前加載完成防止按下重定向按鈕

1
if (!Response.IsRequestBeingRedirected) 
        Response.Redirect("~/RMSPlusErrorPage.aspx?ErrorID=" + 100, false); 
相關問題