小编典典

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

all

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

mscorlib.dll 中出现“System.Threading.ThreadAbortException”类型的第一次机会异常
mscorlib.dll
中出现“System.Threading.ThreadAbortException”类型的异常,但未在用户代码中处理

我对此的理解是,错误是由网络服务器中止调用 response.redirect 的页面的其余部分引起的。

我知道我可以添加第二个参数Response.Redirect,称为 endResponse。如果我将 endResponse 设置为
True,我仍然会收到错误,但如果我将其设置为
False,那么我不会。我很确定这意味着网络服务器正在运行我重定向的页面的其余部分。至少可以说这似乎是低效的。有一个更好的方法吗?除了Response.Redirect或者有没有办法强制旧页面停止加载我不会得到的地方ThreadAbortException


阅读 72

收藏
2022-05-26

共1个答案

小编典典

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

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

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

2022-05-26