自我解釋的問題。爲什麼我的asp.net應用程序拋出ThreadAbortException?
爲什麼這個東西會冒泡到我的try catch中,即使沒有任何錯誤?
爲什麼它出現在我的日誌中,數百次?
我知道它對於新手的問題,但如果這個網站是會得到搜索排名和我們不得不問他們
自我解釋的問題。爲什麼我的asp.net應用程序拋出ThreadAbortException?
爲什麼這個東西會冒泡到我的try catch中,即使沒有任何錯誤?
爲什麼它出現在我的日誌中,數百次?
我知道它對於新手的問題,但如果這個網站是會得到搜索排名和我們不得不問他們
這可能是從Response.Redirect的調用來newbs借鑑。檢查此鏈接了一個解釋:
http://dotnet.org.za/armand/archive/2004/11/16/7088.aspx
(在大多數情況下,調用的Response.Redirect(網址,FALSE)解決了這個問題)
爲一個ThreadAbortException最常見的原因是調用Response.End, Response.Redirect, or Server.Transfer。微軟公佈了一些應該用來代替這些功能的建議功能。
謝謝!!!!!! – 2017-11-21 15:19:40
正如其他人所說,當您調用Response.End()(發生在調用Response.Redirect而不傳遞false作爲第二個參數時)時會發生。這是按設計工作的;通常,如果您調用Response.Redirect,則希望重定向立即發生。有關更多信息,請參見本:
知道有(至少)三個API在內部使用Thread.Abort
,我想回答的更實際的方面,如何制定出如何對待它。
對我們來說,這個錯誤開始突然被記錄下來。什麼改變了?我們修復了一些處理站點地圖的數據庫程序中的錯誤。
log4net日誌顯示X-Forwarded-For標題(我們在NLB後面)是Googlebot的IP地址66.249.78.x,這增強了我對於網站地圖變化的理論,這些理論導致Google抓取我們的網站更積極地尋找圖像。
首先要弄清楚爲什麼只有Googlebot能夠導致這個問題。沒有其他客戶端觸發任何代碼路徑使用Response.Redirect
,或其他。
因此,在HttpApplication.Error
處理程序中,我添加了一些代碼以記錄所有標題的額外詳細輸出,並且HttpResponse
和HttpContext
中的大部分數據都被記錄下來。
這讓我看到的問題是,Googlebot的是使用iPhone的用戶代理字符串,並與武裝,我可以搜索代碼庫的「iPhone」,並拿出:
private void CheckIPhoneAccess() { ... }
而且使用重定向。
該怎麼辦?
好吧,對於這個老化的代碼庫,它不值得修復所有的Response.Redirect
調用,所以我要降低應用程序的日誌級別ThreadAbortException
。
我將改變Googlebot的移動抓取工具的行爲,這將不導致什麼我們的網站用於手機,因爲它只是重定向的第一擊「的謊言」,隨後它讀取一個cookie,並顯示圖像。 Googlebot似乎無法緩存該Cookie。
這並不完美,但該網站將被重建。可能是由另一個團隊使用Scala或其他東西,所以實際上,我認爲這是一個不錯的選擇。我會添加註釋和後可重新回到這個問題,建立一個Response.SafeRedirect
擴展封裝忠告:
Why Response.Redirect causes System.Threading.ThreadAbortException?
盧克
爲什麼Response.Redirect的會給這個異常的原因是asp.net使用Thread.Abort()在內部實現此API。當這個方法被調用時,會拋出一個特殊的ThreadAbortException。這個異常不會被任何catch塊吞噬。它將被重新扔在每個catch塊的末尾。
請注意,上面的鏈接中斷 – JoshL 2011-07-27 21:57:12
埃裏克的答案是正確的,但你應該知道,傳入false參數意味着當前線程不會中止,即將運行Response.Redirect之後的代碼。 – CodeClimber 2012-01-19 09:54:05