我正在学习ASP.NET,并且正在研究QueryStrings。
我看到的一个例子是将一个按钮挂接到一个重定向调用:
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
//throws ThreadAbortException: "Thread was being aborted"
Response.Redirect("Form2.aspx");
}
catch (Exception Ex)
{
System.Diagnostics.Debug.WriteLine(Ex.Message);
}
}
为什么它会在这里抛出一个ThreadAbortException?这正常吗?我应该为此做点什么吗?异常通常不是一件好事,所以当我看到这一点时,我感到震惊。
发布于 2009-09-01 21:06:25
这是设计好的。此KB article描述行为(也适用于Request.End()
和Server.Transfer()
方法)。
对于Response.Redirect()
,存在重载:
Response.Redirect(String url, bool endResponse)
如果传递endResponse=false,,则不会抛出异常(但运行时将继续处理当前请求)。
如果为endResponse=true (或者如果使用不带bool参数的重载),则会抛出异常,并且当前请求将立即终止。
发布于 2009-09-01 21:04:03
这很正常。Server.Transfer()
也会抛出同样的异常。
这是因为在内部,这两个方法都调用Response.End()
,它会立即中止当前的请求处理。Rick Strahl有一个pretty good blog post,它分析了为什么您几乎无法避免这些异常。
发布于 2009-09-01 21:08:58
Response.Redirect在内部调用Response.End,因此它会抛出异常,请改用:
Response.Redirect(url, false);
https://stackoverflow.com/questions/1364645
复制相似问题