ASP.NET:Response.Redirect(...)之后的代码会发生什么?

Bra*_*don 38 asp.net page-lifecycle

Response.Redirect()是否导致当前运行的方法中止?或者Response.Redirect()之后的代码也执行吗?

(也就是说,在Response.Redirect之后是否需要返回/退出Sub?)

Mar*_*age 51

Response.Redirect有一个重载接受一个布尔参数,指示调用是否Response.Redirect结束响应.在没有此参数的情况下调用重载与指定true响应应该结束相同.

结束响应意味着Response.End在修改响应之后调用以使重定向发生,并Response.End抛出一个ThreadAbortException终止当前模块.

调用之后的任何代码Response.Redirect都不会被调用(除非您提供false额外的参数).实际上,代码finally和某些catch处理程序将执行,但你不能吞下一个ThreadAbortException.

  • 为什么这不被接受是任何人的猜测. (4认同)
  • 如果我在发布这篇文章时没有99%完成我的答案,我就不会对我感到烦恼.Nice还添加了有关ThreadAbortException的详细信息. (3认同)

Dav*_*vid 30

这可能不是一个完整的答案,但从我所看到的......

Response.Redirect实际上通过抛出System.Threading.ThreadAbortException导致代码停止执行.

您可以通过在Global.Asax中设置全局错误处理并测试Response.Redirect来自行查看.

编辑

这是支持我的答案的文档的链接:

重定向调用End,在完成时引发ThreadAbortException异常.

HttpResponse.Redirect方法(String,Boolean)(System.Web)