我正在使用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)
有没有避免上述例外的办法.
6条答案
按热度按时间uwopmtnx1#
调用
Server.Transfer
时抛出这个异常是为了停止当前方法的执行--如果执行Response.Redirect
,也会抛出同样的异常。您有两个选择:
Server.Transfer
Server.Transfer
(推荐)**编辑:**划掉,http://support.microsoft.com/kb/312629有几个其他的建议可以尝试,但我仍然推荐上面的#2。
bq9c1y662#
解决这个问题的另一种方法是捕获生成的错误,并且不重新抛出它:
wrrgggsh3#
调用服务器.传输将调用Response.End,它总是抛出ThreadAbortException。这是一个“特殊”异常,因为虽然它可以在catch块中捕获,但它总是在catch块的末尾重新抛出。我希望您的错误日志记录忽略ThreadAbortException。
jv2fixgn4#
此问题发生在
Response.Redirect
和Server.Transfer
方法中,因为这两个方法都在内部调用Response.End
。此问题的解决方案如下。
对于
Server.Transfer
,请改用Server.Execute
方法。dnph8jn45#
将
Response.End()
替换为HttpContext.Current.ApplicationInstance.CompleteRequest();
ldxq2e6h6#
将Response.End()替换为以下内容有助于解决此问题。
return();return();
参考Can we use Response.Flush () instead of Response.End()