我在 ASP.NET 页面中收到“线程被中止”异常。我根本没有使用任何 Response.Redirect/Server.Transfer 方法。有人可以帮我解决这个问题吗?
3 回答
不好的解决方案是使用
Response.Redirect(URL, False)
这将导致不响应 Response.End() 当前页面,但是要小心,这可能会导致问题,因为页面的其余部分将被执行,并可能导致登录绕过以及类似的安全和性能问题。
编辑:显然你没有使用 Response.Redirect 并且你不能用 Try Catch 捕获 AbortThreadExecution,这意味着这个答案现在完全没用了:)
尽管要获得答案,您需要学习如何提出问题。您需要提供以下信息:
- 异常详情
- 什么时候出现,有什么症状
- 你有什么尝试但没有奏效
- 您是否管理隔离问题?
如果在您的代码执行时 Web 应用程序被关闭或强制重新启动,则可能会发生这种情况。我已经看到当您的 Web 应用程序将文件写入托管它的 Web 目录时会发生这种情况,从而导致重新编译 Web 应用程序。
错误:线程被中止。在 System.Threading.Thread.AbortInternal() 在 System.Threading.Thread.Abort(Object stateInfo) 在 System.Web.HttpResponse.End()
此错误主要发生在使用 Response.End、Response.Redirect 或 Server.Transfer 时
原因:Response.End 方法结束页面执行并将执行转移到应用程序事件管道中的 Application_EndRequest 事件。Response.End 后面的代码行没有被执行。
此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法都在内部调用 Response.End。
分辨率/解决方案:
您可以使用 try-catch 语句来捕获此异常
或者
对于 Response.End,调用 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是 Response.End 以绕过对 Application_EndRequest 事件的代码执行。对于 Response.Redirect,使用重载 Response.Redirect(String url, bool endResponse) 为 endResponse 参数传递 false 以抑制对 Response.End 的内部调用。例如:例如:Response.Redirect(“nextpage.aspx”, false); 如果您使用此解决方法,将执行 Response.Redirect 之后的代码。对于 Server.Transfer,请改用 Server.Execute 方法。