Response.Redirect没有结束执行

时间:2008-12-16 21:46:23

标签: asp.net response.redirect

我有Default.aspx页面,它继承自BasePage.cs,它继承自System.Web.UI.Page。 BasePage是我在加载时每页必须做的一些常见事情。

在BasePage中,假设我正在检查X.如果X = 1,那么我将立即重定向到我的“Discontinued.aspx”页面并停止执行BasePage。如果我发现X = 1,我说:

HttpContext.Current.Response.Redirect(“Discontinued.aspx”,true);

我希望重定向停止执行BasePage并立即跳出 - 因此上面语句中的“true” - 应该按照我的理解停止执行当前页面。问题是,它没有。我期待重定向抛出“线程中止异常”。

当我在调试模式下运行时,它会逐步调整,就好像它不仅仅是重定向和离开一样。

但是重定向仍然开始 - 一旦我完成了其他的BasePage,“Discontinued”页面就会因重定向而开始加载。

我的Redirect是否有理由不会杀死BasePage的执行?

6 个答案:

答案 0 :(得分:31)

Response.Redirect的第二个参数是endResponse,但是工具提示显示“表示当前页面的执行是否应该终止”。这是误导性的,因为当变量为true时,页面的执行实际上不会终止。它将完成运行任何代码。然而,不同的是,Render事件被取消,并且响应立即被对象移动的头部刷新。

您需要手动退出任何方法,Response.Redirect / Response.End将不会为您执行此操作。此外,如果您需要条件查看页面是否已被重定向,请查看Response.IsRequestBeingRedirected。

答案 1 :(得分:10)

您是否从调用重定向的函数退出,例如

...redirect(stopit,true);
return;

答案 2 :(得分:2)

可能你正在try {} catch {}块中调用Response.Redirect方法,通过在这个块之外调用来尝试它,你会发现它不会失败。 更多信息: http://www.velocityreviews.com/forums/t72105-responseredirect-in-a-trycatch.html 希望这会有所帮助。

答案 3 :(得分:1)

我要投票支持这个!诅咒我的无知......

显然你可以尝试在重定向后添加以下行(如递归所指出的),

response.end()

但是,response.redirect没有立即引起重定向的原因可能是你有(默认)响应缓冲,并且在刷新缓冲区之前页面处理才会结束。如果这是真的(并且我承认我也懒得尝试),那么添加以下行也可以解决你的问题。

response.flush()

答案 4 :(得分:1)

您可以抛出异常,该异常将退出代码执行,但仍会重定向:

HttpContext.Current.Response.Redirect("/login", true);
throw new Exception("Unauthorized Access");

答案 5 :(得分:0)

对于无条件终止,您可以尝试

Response.End()