为什么Response.Redirect不执行下一行代码?

时间:2012-05-09 04:25:42

标签: asp.net asp.net-4.0

我有一个常规的Asp.Net 4.0 webforms网站。当我这样做时:

Response.Redirect("SomePage.aspx");

我希望我的下一行代码会被执行。然而,令人惊讶的是,下一行代码永远不会被执行。任何人都可以知道何时以及为何会发生这种情况?

3 个答案:

答案 0 :(得分:5)

将忽略任何响应正文内容,例如原始URL指示的页面中显示的HTML文本或Response.Write文本。 此外,当处理Redirect方法时,当前页面中的代码执行将终止,因此页面中的后续代码也将被忽略。

来源:http://msdn.microsoft.com/en-us/library/ms524309(v=vs.90).aspx

答案 1 :(得分:4)

Response.Redirect also accepts two parameters。第二个参数是布尔值,表示当前页面的执行是否应该终止。

因此,调用Response.Redirect("Page.aspx",false)将执行后续的代码行,并避免ThreadAbortException在日志文件中泛滥。

更新:回答默认行为不执行的原因

当使用Response.Redirect时,期望是仅向客户端发送302标头。因此,默认情况下,它会刷新响应&中止当前线程,因此不会执行后续操作。

例如,在授权/认证模块中,一旦我们知道用户没有资格访问资源,我们就会进行重定向,并且出于安全原因,不应该执行事件生命周期的其余部分。

答案 2 :(得分:-1)

response.redirect等于函数中的return语句。所以你回来后写的任何一行都不会被执行。 response.redirect()也是如此。当前页面执行在response.redirect()

之后终止
相关问题