前言
上段時間做項目時,遇到如題之類問題,如今過去有一段時間了,具體出現的情形忘了,當時雖然找到了解決方法,但是依舊沒有弄明白出現此種情況是何種原因,后來在微軟的幫助支持中心找到了答案,特此記錄,以防遺忘。
癥狀
使用Response.End(), Response.Redirect()或Server.Transfer()方法,將引發ThreadAbortException 異常,可以使用try-catch語句來捕捉此異常。項目中Response.Redirect()用戶登錄成功跳轉某頁面,失敗跳轉某頁面(中間有雙開,登錄超時等等驗證)。運行報錯:由于代碼已經過優化或者本機框架位于調用堆棧之上,無法計算表達式的值。
原因
Response.End():結束頁執行和將執行切換到應用程序的事件管道中的application_EndRequest事件,Response.End()之后的代碼行不會被執行;Response.Redirect()和Server.Transfer()這兩種方法都會內部調用Response.End();
解決方案
- 調用HttpContext.Current.ApplicationInstance.CompleteRequest方法,能夠繞過Application_EndRequest事件的代碼執行。
- 對于Response.Redirect(),使用重載,取消內部調用Response.End的endResponse參數(url 字符串、 布爾值 endResponse) 。例如: Response.Redirect ("xxxpage.aspx", false);
- 對于Server.Transfer(),可以改用Server.Execute()方法。
原文參考地址:https://support.microsoft.com/zh-cn/kb/312629
新聞熱點
疑難解答