C# 何时应该使用Response.Redirect(url,true)?
我正在重定向到一个错误页面,在Global.asax中我的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,因为您希望所有其他线程都中止;出现
应用程序\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");