2009-10-19 58 views
3

在以下情況下會發生什麼情況?它會在response.redirect之後拋出工作嗎?response.redirect並投入catch塊

或者我需要在它拋出異常調用棧主要方法catch塊使用Response.Redirect ....

try 
{  
//code 
} 
catch(Exception ex) 
{  
Response.Redirect("Error.aspx"); 
throw;  
} 
+0

你爲什麼不嘗試一下呢?有趣的問題,但。 – 2009-10-19 22:04:30

回答

7

既然你沒有提供的參數來指示是否當前頁面應該繼續執行,它會通過調用End()自動終止頁面。使用單個參數的方法與使用兩個參數調用方法的方法相同,第二個(endResponse)設置爲true。由於End()會導致異常被拋出,所以它不會到達你的throw語句。

參考:http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx

當您使用此方法在 頁面處理程序終止一個 頁面的請求,並開始一個新的請求 另一個頁面,設置endResponse真 或致電重定向方法過載。 此方法對原始 請求調用End,該請求在 完成時拋出 ThreadAbortException異常。

如果您希望頁面繼續執行,您需要使用帶有兩個參數的簽名並將endResponse參數設置爲false

3

如果你調用Response.Redirect(沒有超載),那麼它應該立即停止執行,所以不會引發拋出。

但是,如果您使用重載並通過false例如。 Response.Redirect("Error.aspx", false)然後它將繼續執行頁面,然後重定向。

(至少,這是the documentation)我的理解。