通常,对于.NET,每个人都建议使用:
Response.Redirect("url", false)
而不是
Response.Redirect("url", true)
避免竞争条件,因为后者显然会突然结束这一过程。
是否有任何使用true
代替false
的情况?
当重定向不是回传到同一个aspx页面而是重定向到不同的aspx页面时,false
是否比true
更合适?
答案 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
}