一般来说,对于 .NET,每个人都建议使用:
Response.Redirect("url", false)
代替
Response.Redirect("url", true)
避免竞争条件,因为后者显然会突然结束该过程。
true
在任何情况下使用而不是有意义false
吗?
也比重定向不是回发到相同的 aspx 页面而是重定向到不同的 aspx 页面时false
更合适?true
在最简单的情况下,您true
在想要结束响应和不想结束响应false
时使用。(请注意,true
如果在这种情况下没有提供,则这是默认设置。)
对于初学者,以这种方式结束响应会抛出一个ThreadAbortException
,所以一般来说,如果可能的话,我会避免它。多年来,这种确切的异常情况令生产环境中的许多 ASP.NET 开发人员感到意外。当没有任何异常发生时,没有必要抛出异常,只是正常的逻辑流程。
我想说最佳实践是相应地构建逻辑流,以便您可以结束执行而不必中止线程。在许多情况下,一个简单return;
的 after 就Response.Redirect()
可以做到这一点。在更复杂的情况下(也就是说,在return;
大型代码隐藏方法中最终有很多路径的情况下),问题可能不在于重定向,而在于需要重构的失控方法大小更易于管理的东西。
请记住,这不是Response.Redirect()
退出方法的方法。暂时忘记您正在执行重定向的事实,并认为这是正常的 C# 代码,其中逻辑流需要相应地退出该方法。如果这是该方法做的最后一件事,或者逻辑流通常做的最后一件事,那么你应该没问题。Response.Redirect()
false
将用于不中止线程,以便Response.Redirect()
执行之后/之下的语句。
此处客户端将被重定向到新页面,但当前页面仍将由Server
true
将用于通过中止线程来重定向,因此Response.Redirect()
不会执行之后/之下的语句。
这里客户端将被重定向到新页面,当前页面将不会被执行Server
Response.Redirect("url", false)
可以肯定的是,如果它处于try catch
阻塞状态,您想使用它。
否则会抛出 ThreadAbortException。
try {
Response.Redirect("url", false);
}
catch(Exception ex) {
// Log exception
}