Asp.net 响应。重定向未结束执行

Asp.net 响应。重定向未结束执行,asp.net,response.redirect,Asp.net,Response.redirect,我有Default.aspx页面,它继承自BasePage.cs,它继承自System.Web.UI.page。BasePage是我在加载时做每个页面必须做的一些常见事情的地方 在BasePage中,假设我正在检查X。如果X=1,那么我将立即重定向到我的“discontracted.aspx”页面并停止执行BasePage。如果我发现X=1,我说: HttpContext.Current.Response.Redirect(“contracted.aspx”,true) 我希望重定向停止Base

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

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

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

我希望重定向停止BasePage的执行,并立即跳出——因此上面语句中的“true”应该停止当前页面的执行,正如我所理解的。问题是,事实并非如此。我希望重定向抛出“线程中止异常”

当我在调试模式下运行时,它会一步一步地运行,好像它不只是重定向和离开

但是重定向还是启动了——一旦我完成了对BasePage其余部分的单步操作,重定向的结果就是“中断”页面开始加载


我的重定向不会终止BasePage的执行有什么原因吗?

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

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

您可能在try{}catch{}块内调用Response.Redirect方法,通过在该块外调用来尝试,您将看到它不会失败。 更多信息:
希望这能有所帮助。

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

Response.End()

我会被投票支持的!诅咒我的无知

显然,您可以尝试在重定向之后添加以下行(正如recursive所指出的)

但是response.redirect没有立即导致重定向的原因可能是您启用了响应缓冲(默认设置),并且页面处理直到刷新缓冲区后才结束。如果这是真的(我承认我也懒得尝试),那么添加以下行也可以解决您的问题

response.flush()

Response.Redirect的第二个参数是
endResponse
,但是工具提示显示“指示当前页面的执行是否应终止”。这是误导性的,因为当变量为true时,页面的执行实际上不会终止。它将完成任何代码的运行。但是,不同的情况是,渲染事件被取消,响应会立即使用“对象移动”标题刷新


您需要手动退出任何方法,Response.Redirect/Response.End不会为您这样做。此外,如果您需要条件来查看页面是否已重定向,请签出Response.IsRequestBeingRedirected。

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

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

另外,作为旁注,当第一个Response.Redirect没有让我们跳出BasePage.cs时,稍后的重定向尝试会遇到错误,即标题已经发送-显示重定向已启动,但尚未完全执行。更好的是:
HttpContext.Current.Response.Redirect(“contracted.aspx”,false);返回希望这有帮助。在我的应用程序的其他地方,我确实希望System.Threading.ThreadAbortException,并且可以通过不做任何事情来处理它。所以我不怕这个例外——事实上,这正是我所期望和想要的。它只是不会把它扔出去……也许是因为我在BasePage而不是aspx?顺便说一句,正如你在上面看到的,你的第二个想法证明是正确的。谢谢。很酷,很高兴你找到了答案。干杯。我先试过这个,但似乎什么都没停止。谢谢你的想法。我在响应后添加了一个“return;”。重定向,这让我跳出了函数,完成了我想做的事情。谢谢,我确实有“HttpContext.Current.Response.BufferOutput=true;”,所以你可能是对的。Response.End()没有停止任何操作,因此我必须使用“return;”选项。需要知道的东西很好-谢谢。被不准确的工具提示挫败!回答得好-除了您忘了提到在重定向之后必须返回函数之外;-)嗯,那真是太聪明了。
HttpContext.Current.Response.Redirect("/login", true);
throw new Exception("Unauthorized Access");