2

一般来说,对于 .NET,每个人都建议使用:

Response.Redirect("url", false)

代替

Response.Redirect("url", true)

避免竞争条件,因为后者显然会突然结束该过程。

true在任何情况下使用而不是有意义false吗?

也比重定向不是回发到相同的 aspx 页面而是重定向到不同的 aspx 页面时false更合适?true

4

3 回答 3

2

在最简单的情况下,您true在想要结束响应和不想结束响应false时使用。(请注意,true如果在这种情况下没有提供,则这是默认设置。)

对于初学者,以这种方式结束响应会抛出一个ThreadAbortException,所以一般来说,如果可能的话,我会避免它。多年来,这种确切的异常情况令生产环境中的许多 ASP.NET 开发人员感到意外。当没有任何异常发生时,没有必要抛出异常,只是正常的逻辑流程。

我想说最佳实践是相应地构建逻辑流,以便您可以结束执行而不必中止线程。在许多情况下,一个简单return;的 after 就Response.Redirect()可以做到这一点。在更复杂的情况下(也就是说,在return;大型代码隐藏方法中最终有很多路径的情况下),问题可能不在于重定向,而在于需要重构的失控方法大小更易于管理的东西。

请记住,这不是Response.Redirect()退出方法的方法。暂时忘记您正在执行重定向的事实,并认为这是正常的 C# 代码,其中逻辑流需要相应地退出该方法。如果这是该方法做的最后一件事,或者逻辑流通常做的最后一件事,那么你应该没问题。Response.Redirect()

于 2013-11-11T16:40:37.250 回答
1

false将用于不中止线程,以便Response.Redirect()执行之后/之下的语句。

此处客户端将被重定向到新页面,但当前页面仍将由Server

true将用于通过中止线程来重定向,因此Response.Redirect()不会执行之后/之下的语句。

这里客户端将被重定向到新页面,当前页面将不会被执行Server

于 2013-11-11T16:36:52.000 回答
0

Response.Redirect("url", false)可以肯定的是,如果它处于try catch阻塞状态,您想使用它。

否则会抛出 ThreadAbortException。

try {
  Response.Redirect("url", false);
}
catch(Exception ex) {
   // Log exception
}
于 2013-11-11T16:39:52.997 回答