我应该何时使用Response.Redirect(url,true)?

Jac*_*ope 35 c# asp.net response.redirect

我正在重定向到一个错误页面,在我Application_Error的Global.asax中有一个美化错误信息.

目前它说:

Response.Redirect("Error.aspx", true);
Run Code Online (Sandbox Code Playgroud)

应该是:

Response.Redirect("Error.aspx", false); 
Run Code Online (Sandbox Code Playgroud)

我不知道在什么情况下我应该使用true和我应该使用false?在MSDN页说,使用更喜欢false以避免ThreadAbortExceptions,所以当我应该使用true

Dav*_*vid 46

您可以使用false,当你不希望中止该线程.这意味着false将导致代码继续执行.因此,Response.Redirect将执行之后出现的代码行.A true只会杀死线程,所以没有进一步执行,这反过来抛出一个ThreadAbortException.

所以这真的是一个判断调用,基于该情况下其余代码的外观.通常,您希望将调用放在Response.Redirect执行路径的末尾,以便不需要再执行任何操作.但很多时候情况并非如此.这只是你如何控制代码中的逻辑流程的问题.

例如,如果下一行Response.Redirect是a return并且执行路径只是结束,那么你可能没问题.但是如果存在各种逻辑并且在这种情况下执行它将使系统处于未知状态,那么您可能想要中止该线程.

就个人而言,我认为中止线程表明逻辑控制不佳.它类似于众所周知的代码气味,其中异常用于控制逻辑流程,这是普遍不赞成的.如果您可以控制逻辑流而无需中止线程并抛出异常,那么这可能是首选.


Shi*_*ala 34

在此输入图像描述

Response.Redirect(URL,false):客户端被重定向到新页面,服务器上的当前页面将继续处理.

Response.Redirect(URL,true):客户端被重定向到新页面,但中止当前页面的处理.

您还可以看到此视频演示差异Response.Redirect(False vs True)ASP.NET采访问题及答案.


Guf*_*ffa 16

你永远不需要使用true,因为没有布尔参数的重载.

Response.Redirect("Error.aspx", false);
Run Code Online (Sandbox Code Playgroud)

要么

Response.Redirect("Error.aspx");
Run Code Online (Sandbox Code Playgroud)

添加了布尔参数,以便您可以在不停止执行的情况下设置重定向.如果您可以自己退出页面代码而不会导致任何额外成本,例如数据绑定发生,这是更可取的.

  • +1 提及 true 是默认设置。他们应该说得更清楚 (2认同)

τεκ*_*τεκ 7

这里最好使用true,因为你希望所有其他线程都中止; 出现错误,应用程序无法继续.