2011-07-15 32 views
31

我在我的Application_Error Global.asax中重定向到了一個錯誤頁面,其中包含了一條經過驗證的錯誤消息。什麼時候應該使用Response.Redirect(url,true)?

目前,它說:

Response.Redirect("Error.aspx", true); 

如果是這樣:

Response.Redirect("Error.aspx", false); 

我不知道在什麼情況下我應該使用true和我應該使用falseMSDN page表示寧願使用false來避免ThreadAbortExceptions,所以何時應該使用true

回答

42

當您不想中止該線程時,您可以使用false。這意味着false將導致代碼繼續執行。所以在Response.Redirect之後出現的代碼行將被執行。一個true只會殺死線程,所以沒有進一步的執行,而這又會拋出一個ThreadAbortException

因此,這實際上是一個判斷調用,基於該情況下其餘代碼的外觀。一般來說,您希望在執行路徑的末尾調用Response.Redirect,以便不需要執行任何其他操作。但很多時候情況並非如此。這只是關於如何控制代碼中的邏輯流程的問題。

例如,如果Response.Redirect之後的下一行是return並且執行路徑簡單地結束,那麼您可能沒有問題。但是如果存在各種邏輯並在這種情況下執行它會使系統處於未知狀態,那麼您可能想中止該線程。

我個人認爲中止線程表示邏輯控制不佳。它類似於衆所周知的代碼異味,其中異常用於控制邏輯流,這是普遍不被接受的。如果你可以控制邏輯流程而不需要中止一個線程並拋出一個異常,那麼這可能是首選。

7

這裏最好使用true,因爲你想要所有其他線程放棄;出現錯誤,應用程序無法繼續。

4

如果你把它設置爲true,應用程序結束的響應,並將其發送給用戶,如果你把它設置爲false代碼之後重定向將繼續執行,用戶將被重定向到整頁加載生命週期結束後的新頁面。

14

你永遠不需要使用true,因爲有沒有布爾參數的重載。

Response.Redirect("Error.aspx", false); 

Response.Redirect("Error.aspx"); 

布爾參數加入,讓你可以設置重定向不停止執行。如果您可以自己退出頁面代碼,而不會導致任何額外的成本,例如數據綁定發生,則更好。

+1

+1提醒true是默認值。他們應該更清楚了 – Aximili

28

Enter image description here

迴應。重定向(URL,false):客戶端重定向到新頁面,服務器上的當前頁面將繼續處理。

Response.Redirect(URL,true):客戶端重定向到新頁面,但當前頁面的處理被中止。

你也可以看到這個視頻,它演示了差異Response.Redirect (False vs True) ASP.NET Interview questions with answers

+1

+1該視頻清楚地表明它甚至不執行第二種情況下的下一行 – Aximili

相關問題