一尘不染

为什么Response.Redirect导致System.Threading.ThreadAbortException?

c#

当我使用Response.Redirect(…)将表单重定向到新页面时,出现错误:

mscorlib.dll中发生类型’System.Threading.ThreadAbortException’的第一次机会异常mscorlib.dll中发生类型’System.Threading.ThreadAbortException’
的异常,但未在用户代码中处理

我对此的理解是由于网络服务器中止了response.redirect被调用的页面的其余部分而导致的错误。

我知道我可以向其添加第二个参数Response.Redirect,称为endResponse。如果将endResponse设置为True,仍然会收到错误,但是如果将其设置为False,则不会。我非常确定,但这意味着Web服务器正在运行我重定向的其他页面。至少可以说这似乎效率低下。有一个更好的方法吗?除了Response.Redirect或是否有其他方法可以迫使旧页面停止加载而我无法得到ThreadAbortException


阅读 374

收藏
2020-05-19

共1个答案

一尘不染

正确的模式是使用endResponse =
false调用Redirect重载,并进行调用以告知IIS管道,一旦返回控件,它应直接进入EndRequest阶段:

Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();

Thomas
Marquardt的这篇博客文章提供了更多详细信息,包括如何处理Application_Error处理程序内部重定向的特殊情况。

2020-05-19