我正在重定向到错误页面,在我的Application_Error
中,在Global.asax中显示错误信息。
目前它说:
Response.Redirect("Error.aspx", true);
应该是:
Response.Redirect("Error.aspx", false);
我不确定在哪种情况下我应该使用true
以及我应该使用false
? MSDN page表示更喜欢使用false
来避免ThreadAbortExceptions,那么何时应该使用true
?
答案 0 :(得分:45)
如果您不想中止线程,请使用false
。这意味着false
将导致代码继续执行。因此,Response.Redirect
之后出现的代码行将被执行。 true
只会杀死该线程,因此不再执行任何操作,这反过来会抛出ThreadAbortException
。
所以这真的是一个判断调用,基于该情况下其余代码的外观。通常,您希望在执行路径的末尾调用Response.Redirect
,以便不需要再执行任何操作。但很多时候情况并非如此。这只是你如何控制代码中的逻辑流程的问题。
例如,如果Response.Redirect
之后的下一行是return
且执行路径只是结束,那么你可能没问题。但是如果存在各种逻辑并且在这种情况下执行它会使系统处于未知状态,那么您可能想要中止该线程。
我个人认为中止线程表明逻辑控制不佳。它类似于众所周知的代码气味,其中异常用于控制逻辑流程,这是普遍不赞成的。如果您可以控制逻辑流而无需中止线程并抛出异常,那么这可能是首选。
答案 1 :(得分:34)
Response.Redirect(URL,false):客户端被重定向到新页面,服务器上的当前页面将继续处理。
Response.Redirect(URL,true):客户端被重定向到新页面,但当前页面的处理被中止。
您还可以看到此视频演示 Response.Redirect ( False vs True) ASP.NET Interview questions with answers 之间的差异。
答案 2 :(得分:16)
您永远不需要使用true
,因为存在没有布尔参数的重载。
Response.Redirect("Error.aspx", false);
或
Response.Redirect("Error.aspx");
添加了布尔参数,以便您可以在不停止执行的情况下设置重定向。如果您可以自己退出页面代码,而不会导致任何额外费用,例如发生数据绑定,那就更好了。
答案 3 :(得分:7)
此处最好使用true
,因为您希望所有其他线程中止;出现错误,应用程序无法继续。
答案 4 :(得分:4)
如果将其设置为true,则应用程序结束响应并将其发送回用户,如果将其设置为false,则重定向后的代码将继续执行,并且用户将被重定向到新的整页加载生命周期结束后的页面。