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

C# 何时应该使用Response.Redirect(url,true)?,c#,asp.net,response.redirect,C#,Asp.net,Response.redirect,我正在重定向到一个错误页面,在Global.asax中我的应用程序\u Error中有一条经过修饰的错误消息 现在它说: Response.Redirect("Error.aspx", true); 如果是: Response.Redirect("Error.aspx", false); 我不确定在什么情况下应该使用true,在什么情况下应该使用false?据说更喜欢使用false来避免线程中止异常,所以我应该在什么时候使用true?这里最好使用true,因为您希望所有其他线程都中止;出现

我正在重定向到一个错误页面,在Global.asax中我的
应用程序\u Error
中有一条经过修饰的错误消息

现在它说:

Response.Redirect("Error.aspx", true);
如果是:

Response.Redirect("Error.aspx", false); 

我不确定在什么情况下应该使用
true
,在什么情况下应该使用
false
?据说更喜欢使用
false
来避免线程中止异常,所以我应该在什么时候使用
true

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

如果将其设置为true,应用程序将结束响应并将其发送回用户,如果将其设置为false,则重定向后的代码将继续执行,在整个页面加载生命周期结束后,用户将被重定向到新页面。

如果不想中止线程,则使用
false
。这意味着
false
将导致代码继续执行。因此,将执行
响应.Redirect之后出现的代码行。
true
只会杀死线程,因此不会执行进一步的操作,这反过来会引发
ThreadAbortException

因此,这实际上是一个判断调用,它基于在这种情况下代码的其余部分的外观。通常,您希望将对
Response.Redirect
的调用放在执行路径的末尾,这样就不需要再执行任何操作了。但很多时候情况并非如此。这只是如何控制代码中的逻辑流的问题

例如,如果
Response.Redirect
后面的下一行是
return
,并且执行路径只是结束,那么您可能就没事了。但是如果存在各种各样的逻辑,并且在这种情况下执行它会使系统处于未知状态,那么您可能需要中止线程


我个人认为中止线程意味着逻辑控制差。这类似于众所周知的代码气味,其中异常被用来控制逻辑流,这是普遍不赞成的。如果您可以控制逻辑流,而不需要中止线程和引发异常,那么这可能是首选。

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

Response.Redirect("Error.aspx", false);

添加了布尔参数,以便您可以在不停止执行的情况下设置重定向。如果您可以自己退出页面代码,而不会产生任何额外的成本,例如数据绑定,那么这是最好的选择。

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

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


您还可以看到演示差异的此视频。

+1该视频清楚地表明,在第二种情况下,它甚至不执行下一行,默认情况下为+1。他们应该说得更清楚
Response.Redirect("Error.aspx");