asp.net 线程被中止

jm81lzqq  于 2023-04-13  发布在  .NET
关注(0)|答案(6)|浏览(156)

我正在使用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)

有没有避免上述例外的办法.

uwopmtnx

uwopmtnx1#

调用Server.Transfer时抛出这个异常是为了停止当前方法的执行--如果执行Response.Redirect,也会抛出同样的异常。
您有两个选择:

  • 捕获并重新抛出ThreadAbortException /重新执行Server.Transfer
  • 确保只在不会被捕获的地方执行Server.Transfer(推荐)
    **编辑:**划掉,http://support.microsoft.com/kb/312629有几个其他的建议可以尝试,但我仍然推荐上面的#2。
bq9c1y66

bq9c1y662#

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

catch (ThreadAbortException)
        { 
        }
wrrgggsh

wrrgggsh3#

调用服务器.传输将调用Response.End,它总是抛出ThreadAbortException。这是一个“特殊”异常,因为虽然它可以在catch块中捕获,但它总是在catch块的末尾重新抛出。我希望您的错误日志记录忽略ThreadAbortException。

jv2fixgn

jv2fixgn4#

此问题发生在Response.RedirectServer.Transfer方法中,因为这两个方法都在内部调用Response.End
此问题的解决方案如下。
对于Server.Transfer,请改用Server.Execute方法。

dnph8jn4

dnph8jn45#

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

ldxq2e6h

ldxq2e6h6#

将Response.End()替换为以下内容有助于解决此问题。
return();return();
参考Can we use Response.Flush () instead of Response.End()

相关问题