【发布时间】:2013-01-06 09:26:47
【问题描述】:
可能重复:
Response.Redirect causes System.Threading.ThreadAbortException
ASP/C#.NET(Web 表单,不是 MVC)
更新:刚刚找到一个相关帖子(可能是重复的):Why Response.Redirect causes System.Threading.ThreadAbortException?
~~~
经过一番研究,我了解到,一般情况下,在使用 Response.Redirect() 时,最好为第二个参数传递 FALSE,以避免 System.Threading.ThreadAbortException。 (http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx)
我的问题是,“当为第二个参数传递 false 时,是否有推荐的方法(模式)来管理(即跳过)重定向后触发的页面事件中的处理?”
当我在 Page_Load() 中检查和重定向过期会话时,这对我来说主要是一个问题。每次重定向时都必须设置一个“_Redirected”标志,然后在每个事件的顶部检查该标志,这似乎非常乏味。过去我不必担心这一点,因为我总是为第二个参数传递 TRUE,不知道更好。
下面是一些代码,显示了我不想做的事情(在处理每个事件之前检查 _Redirected)。也许我正在寻找的是更好的会话过期处理模式。
任何有关如何改进此处理的建议,我们将不胜感激。
private bool _Redirected = false;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["key"] == null)
{
Response.Redirect("SessionExpired.aspx", false);
Context.ApplicationInstance.CompleteRequest();
_Redirected = true;
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
if (!_Redirected)
{
// do Page_PreRender() stuff...
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (!_Redirected)
{
// do Button1_Click() stuff...
Response.Redirect("Button1Page.aspx", false);
Context.ApplicationInstance.CompleteRequest();
_Redirected = true;
}
}
protected void Button2_Click(object sender, EventArgs e)
{
if (!_Redirected)
{
// do Button2_Click() stuff...
Response.Redirect("Button2Page.aspx", false);
Context.ApplicationInstance.CompleteRequest();
_Redirected = true;
}
}
~~~
[2013 年 1 月 24 日] 回复 https://stackoverflow.com/users/2424/chris-lively(谢谢,顺便说一句),这里是简化的代码,我认为它与您测试的相似。我仍然看到 Button1_Click() 在 Response.Redirect(url, false) 和 Page_Load() 中的 .CompleteRequest() 之后在回发时执行。
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)
{
Response.Redirect("Redirect.aspx", false);
Context.ApplicationInstance.CompleteRequest();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("Button1 clicked!");
}
此行为得到了https://stackoverflow.com/a/12957854/1530187 对我在更新中提到的类似帖子的证实。
知道我做错了什么会导致页面在重定向后继续执行吗?
【问题讨论】:
-
那段代码和我测试的差不多。诡异的。我使用的是 asp.net 4.5
-
很好奇。我正在使用 4。也许他们用 4.5 做了一些神奇的事情。我还在 4.0 和 2010 上,所以我认为我无法测试 4.5。
标签: c# asp.net session response.redirect