我有一个常规的Asp.Net 4.0 webforms网站。当我这样做时:
Response.Redirect("SomePage.aspx");
我希望我的下一行代码会被执行。然而,令人惊讶的是,下一行代码永远不会被执行。任何人都可以知道何时以及为何会发生这种情况?
答案 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()
之后终止