何时最好使用false作为Response.Redirect的第二个参数,何时不使用?

时间:2013-11-11 16:32:02

标签: c# asp.net

通常,对于.NET,每个人都建议使用:

Response.Redirect("url", false)

而不是

Response.Redirect("url", true)

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

是否有任何使用true代替false的情况?

当重定向不是回传到同一个aspx页面而是重定向到不同的aspx页面时,false是否比true更合适?

3 个答案:

答案 0 :(得分:2)

最简单的方法是,当您想要结束响应时使用true,而当您不想结束时使用false。 (请注意,如果在这种情况下不提供true,则ThreadAbortException是默认值。)

对于初学者来说,以这种方式结束响应将抛出return;,所以一般情况下我会尽可能避免它。多年来,这种确切的异常情况让许多ASP.NET开发人员在生产环境中大吃一惊。当没有异常发生时,没有必要抛出异常,只是正常的逻辑流程。

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

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

答案 1 :(得分:1)

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

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

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

此处客户端将重定向到新页面,当前页面不会由Server

执行

答案 2 :(得分:0)

确实如此,如果它在Response.Redirect("url", false)区块中,您希望使用try catch

否则,它将抛出ThreadAbortException。

try {
  Response.Redirect("url", false);
}
catch(Exception ex) {
   // Log exception
}