2012-05-09 93 views
1

我有一個常規的Asp.Net 4.0 webforms網站。當我這樣做:爲什麼Response.Redirect不執行下一行代碼?

Response.Redirect("SomePage.aspx"); 

我期望我的下一行代碼會被執行。然而,令人驚訝的是,下一行代碼從未被執行。任何人都可以知道什麼時候發生,爲什麼會發生?

+0

您已將頁面重定向。因此下一行代碼不會被執行。 – Raptor

+0

@Shivan:怎麼樣?不應該Response.Redirect應該只在響應頭中設置位置標題?它是否包含會阻止下一行執行的「返回」關鍵字? – Jaggu

+0

@Shadow_boi回答了你。 – Raptor

回答

4

Response.Redirect also accepts two parameters。第二個參數是布爾值,表示當前頁面的執行是否應該終止。

因此,調用Response.Redirect("Page.aspx",false)將執行後續代碼行,並且將避免ThreadAbortException被淹沒在您的日誌文件中。

更新:要回答爲什麼默認行爲是不執行

Response.Redirect使用期望是隻有302頭髮送到客戶端。因此,默認情況下,刷新響應&會中止當前線程,因此後續操作將不會執行。

例如,在授權/認證模塊中,一旦我們知道用戶沒有資格訪問資源,我們只做一次重定向,並且出於安全原因不應執行其餘的事件生命週期。

-1

的Response.Redirect等於在功能return語句。所以你在返回後寫的任何行都不會被執行。 response.redirect()也是如此。當前頁面執行在response.redirect()後終止()