我有一個常規的Asp.Net 4.0 webforms網站。當我這樣做:爲什麼Response.Redirect不執行下一行代碼?
Response.Redirect("SomePage.aspx");
我期望我的下一行代碼會被執行。然而,令人驚訝的是,下一行代碼從未被執行。任何人都可以知道什麼時候發生,爲什麼會發生?
我有一個常規的Asp.Net 4.0 webforms網站。當我這樣做:爲什麼Response.Redirect不執行下一行代碼?
Response.Redirect("SomePage.aspx");
我期望我的下一行代碼會被執行。然而,令人驚訝的是,下一行代碼從未被執行。任何人都可以知道什麼時候發生,爲什麼會發生?
Response.Redirect
also accepts two parameters。第二個參數是布爾值,表示當前頁面的執行是否應該終止。
因此,調用Response.Redirect("Page.aspx",false)
將執行後續代碼行,並且將避免ThreadAbortException
被淹沒在您的日誌文件中。
更新:要回答爲什麼默認行爲是不執行
當Response.Redirect
使用期望是隻有302頭髮送到客戶端。因此,默認情況下,刷新響應&會中止當前線程,因此後續操作將不會執行。
例如,在授權/認證模塊中,一旦我們知道用戶沒有資格訪問資源,我們只做一次重定向,並且出於安全原因不應執行其餘的事件生命週期。
任何響應正文內容(例如顯示的HTML文本或Response.Write文本)都將被忽略。 此外,在處理重定向方法時,當前頁面中的代碼執行將終止,因此頁面中的後續代碼也將被忽略。
來源:http://msdn.microsoft.com/en-us/library/ms524309(v=vs.90).aspx
的Response.Redirect等於在功能return語句。所以你在返回後寫的任何行都不會被執行。 response.redirect()也是如此。當前頁面執行在response.redirect()後終止()
您已將頁面重定向。因此下一行代碼不會被執行。 – Raptor
@Shivan:怎麼樣?不應該Response.Redirect應該只在響應頭中設置位置標題?它是否包含會阻止下一行執行的「返回」關鍵字? – Jaggu
@Shadow_boi回答了你。 – Raptor