31

我正在使用Server.Transfer。一切正常,但异常日志显示以下异常。

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
   at System.Web.HttpServerUtility.Transfer(String path)

任何避免上述异常的想法。

4

6 回答 6

40

为了停止当前方法的执行,调用会抛出这个异常Server.Transfer——如果你这样做了,就会抛出完全相同的东西Response.Redirect

你有两个选择是:

  • 捕获并重新抛出 ThreadAbortException / 重新执行 Server.Transfer
  • 确保只Server.Transfer在不会被抓到的地方进行(推荐)

编辑:从头开始, http: //support.microsoft.com/kb/312629还有其他一些建议可以尝试,但我仍然推荐上面的#2。

于 2009-09-16T14:49:30.417 回答
10

解决此问题的另一种方法是捕获生成的错误并且不重新抛出它:

        catch (ThreadAbortException)
        { 
        }
于 2013-01-15T08:02:20.723 回答
8

Caling Server.Transfer 将调用 Response.End,它总是抛出一个 ThreadAbortException。这是一个“特殊”异常,因为虽然它可以在 catch 块中被捕获,但它总是会在 catch 块的末尾被重新抛出。我会让你的错误日志忽略 ThreadAbortExceptions。

于 2009-09-16T14:50:07.217 回答
8

此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法都在内部调用 Response.End。

此问题的解决方案如下。

对于 Server.Transfer,请改用 Server.Execute 方法。

访问此链接以下载示例示例。http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html

于 2012-04-23T09:52:11.687 回答
1

替换Response.End()HttpContext.Current.ApplicationInstance.CompleteRequest();

于 2017-02-11T12:24:37.660 回答
0

将 Response.End() 替换为以下内容有助于解决问题。

Response.Flush(); 响应。关闭();

参考我们可以使用 Response.Flush() 代替 Response.End()

于 2016-08-11T18:15:51.823 回答