如果使用 Response.End、Response.Redirect 或 Server.Transfer,则发生 ThreadAbortException
本文帮助您解决使用 、 或 时发生的 ThreadAbortException Response.End
Response.Redirect
错误 Server.Transfer
。
原始产品版本: ASP.NET 4.5.2 .NET Framework 4.5.2 上 ASP.NET 3.5 Service Pack 1 .NET Framework 1
原始 KB 编号: 312629
症状
如果使用 、 Response.End
Response.Redirect
或 方法, Server.Transfer
则会发生 ThreadAbortException 异常。 可以使用语句 try-catch
捕获此异常。
原因
Response.End
该方法结束页面执行,将执行转移到Application_EndRequest管道中的事件。 不执行以下 Response.End
代码行。
此问题在 和 方法 Response.Redirect
中 Server.Transfer
出现,因为这两种方法在内部调用 Response.End。
解决方案
若要解决此问题,请使用下列方法之一:
对于
Response.End
,HttpContext.Current.ApplicationInstance.CompleteRequest
调用 方法,Response.End
而不是绕过对 事件的代码Application_EndRequest
执行。对于
Response.Redirect
,使用重载 Response.Redirect (String url, bool endResponse) ,为 endResponse 参数传递 false 以禁止对 的内部调用Response.End
。 例如:Response.Redirect ("nextpage.aspx", false);
如果使用此解决方法,将执行以下
Response.Redirect
代码。对于
Server.Transfer
,请Server.Execute
改为使用 方法。
尽管 ASP.NET 处理此异常,但您可以使用 try-catch
语句捕获此异常。 例如:
try
{
Response.Redirect("nextpage.aspx");
}
catch (Exception ex)
{
Response.Write (ex.Message);
}
在行上添加一个断点 Response.Write
,注意此断点已命中。 检查异常时,请注意发生 ThreadAbortException 异常。