2010-12-06 59 views
12

我有這個錯誤線程被中止。,今天下午在我的錯誤日誌中。Response.Redirect和線程被中止錯誤?

導致此錯誤代碼是:

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

如果我的bool值更改爲false,錯誤日誌爲空,但此錯誤停止再來,但程序停止工作。

如果我保持這樣,我得到這樣的錯誤就像討厭。

我想知道使用Response.Redirect通過true作爲endResponse參數的值的替代方法。

+2

檢出http://msdn.microsoft.com/en-us/library/a8wa7sdt(VS.80).aspx – Mike 2010-12-06 16:35:00

+1

Respose.Redirect將在內部調用Response.End,它可以通過使用'false' (Response.Redirect(Login.aspx,false);)。但它不應該導致程序停止工作。 – wizzardz 2010-12-06 16:42:03

回答

17

我發現了這個異常並將其吞下,因爲ASP.NET使用異常進行流量控制而非異常情況。

try 
{ 
    // Do stuff. 
} 
catch(ThreadAbortException) 
{ 
    // Do nothing. ASP.NET is redirecting. 
    // Always comment this so other developers know why the exception 
    // is being swallowed. 
} 
catch(OtherExceptionTypes ex) 
{ 
    // Log other types of exception. 
} 
2

你可以這樣 的Response.Redirect( 「爲Login.aspx」,FALSE)改變 那麼它不會中止。

3

正如Response.Redirect(url) ThreadAbortException解決方案指出:

,當你撥打電話到 Response.Redirect(url)因爲系統中止 當前網頁線程處理髮送重定向到一個響應 後ThreadAbortException被拋出流。 Response.Redirect(url)實際上在內部致電Response.End() ,它的Response.End()調用Thread.Abort()哪個 冒泡堆棧以結束線程。在極少情況下,致電Response.End()的 實際上不會呼叫Thread.Abort(),而是 而不是呼叫HttpApplication.CompleteRequest()

或者只是將Response.Redirect("~/Membership/UserRegistration.aspx");移出Try/Catch塊。

1

對於要重定向,創建所有捕獲錯誤的一個「轉到」註定了嘗試捕捉如下:

Try 

     'do stuff 

    Catch ex As Exception 

     'logging 
     GoTo MyRedirection 

    End Try 

    'Prevent redirection in case of no errors 
    Exit Sub 

MyRedirection: 
    Response.Redirect("login.aspx", True) 

這既會導致流產線程也不需要多漁獲。