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

Met*_*uru 4 c# asp.net-mvc http

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

线程正在中止.HTTP/1.1 200 OK

(标题的其余部分)

...(比如HTML的1/10)

就是这样,它们实际上在浏览器窗口中获得了大量文本.

它不会一直发生,只是随机发生.计算机...根据我的经验总是有一切的理由,总是.那到底是怎么回事?

我搜索了整个解决方案,发现了很多对Response.Redirect()的调用,看起来它可能是基于我读过的其他问题的罪魁祸首......

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

...或者为什么它会将这个奇怪的结果反馈给浏览器而不是我们设置的普通自定义错误页面.如果这确实是造成它的原因,我还没有确定.如果是,我认为我不能简单地添加'false'参数,因为我不知道如果它继续执行当前代码会怎么做.

Mar*_*age 7

当您调用Response.End(由其他方法调用,如Response.RedirectServer.Transfer)时,执行的线程将被中止并抛出ThreadAbortException(在ASP.NET中中止线程并不例外).您可以捕获此异常,但它将始终在catch处理程序中重新抛出.这使得它与其他异常类型区别开来,但它是有意义的,因为您不能阻止线程中止,并且在此过程中通过执行finally块来清理堆栈.

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

像这样的东西(可能更复杂,难以在"成熟"的代码库中跟踪):

void HandleRequest() {
  try {
    Response.Redirect(...);
  }
  catch (Exception ex) {
    Response.Write(...);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果抛出Response.Redirect带有Response.Enda 的结尾,则会执行向响应添加文本.ThreadAbortExceptionResponse.Write