什么原因导致'线程被中止'异常随机发生,并向浏览器显示HTTP头和部分HTML

本文关键字:浏览器 显示 HTTP HTML 随机 线程 什么 异常 | 更新日期: 2023-09-27 17:54:20

发生的事情偶尔是随机的,而不是像您期望的那样返回到浏览器的HTML,它看起来有点像这样:

线程被终止。http/1.1 200 OK

(标题的其余部分)

…(如HTML的1/10)

就是这样,他们实际上是在浏览器窗口中获得一堆文本。

这不是一直发生的,只是随机的。电脑……根据我的经验,做任何事都要有理由。这到底是怎么回事?

我已经搜索了整个解决方案,并发现相当多的调用Response.Redirect(),这似乎是基于我读过的其他问题的罪魁祸首…

这一切都很好,但它并没有告诉我为什么它会随机发生

…或者为什么它会把这个奇怪的结果返回给浏览器,而不是我们设置的正常自定义错误页面。如果这确实是导致它的原因,我还没有确定。如果是,我不认为我可以简单地添加'false'参数,因为我不知道如果它继续执行当前代码会做什么。

什么原因导致'线程被中止'异常随机发生,并向浏览器显示HTTP头和部分HTML

当你调用Response时。End(由Response等其他方法调用)。重定向和Server.Transfer)执行线程被中止,抛出ThreadAbortException(中止线程在ASP.NET中并不例外)。您可以捕获此异常,但它总是会在catch处理程序中被重新抛出。这将它与其他异常类型区分开来,但它是有意义的,因为你不应该能够阻止线程终止,并且在进程中通过执行finally块来清理堆栈。

也许你有一些异常处理逻辑,其中Response.Endtry块内被调用,并且在catch块中产生意外输出?

类似这样的内容(在"成熟"的代码库中可能更复杂,更难以跟踪):

void HandleRequest() {
  try {
    Response.Redirect(...);
  }
  catch (Exception ex) {
    Response.Write(...);
  }
}

如果Response.RedirectResponse.End结尾,则抛出ThreadAbortException, Response.Write将执行向响应添加文本。

我不知道是否可能是同样的问题,但我经常看到'线程被中止'异常发生时,发生在ASP中发生的事情。. NET(如应用程序池回收,重新编译应用程序等)。

你能检查事件日志看看是否同时发生了什么吗?