Reputation: 3681
I am using Server.Transfer. Everything works fine, but exception log shows following exception.
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)
Any idea to avoid above exception.
Upvotes: 33
Views: 100533
Reputation: 1614
This problem occurs in the Response.Redirect
and Server.Transfer
methods because both methods call Response.End
internally.
Solution for this Problem is as follows.
For Server.Transfer
, use the Server.Execute
method instead.
Upvotes: 8
Reputation: 17
Replace Response.End()
With HttpContext.Current.ApplicationInstance.CompleteRequest();
Upvotes: 1
Reputation: 11
Replacing Response.End() by the following helped fix the problem.
Response.Flush(); Response.Close();
Refer Can we use Response.Flush () instead of Response.End()
Upvotes: 1
Reputation: 111
Another way to solve this, is to catch the generated error and to not rethrow it:
catch (ThreadAbortException)
{
}
Upvotes: 11
Reputation: 6640
Caling Server.Transfer will call Response.End which always throws a ThreadAbortException. This is a "special" exception because while it can be caught in a catch block, it will always be re thrown at the end of the catch block. I would have your error logging ignore ThreadAbortExceptions.
Upvotes: 8
Reputation: 86729
This exception is throw by the call to Server.Transfer
in order to halt the execution of the current method - exactly the same thing gets thrown if you do Response.Redirect
.
The two choices you have are:
Server.Transfer
Server.Transfer
in places
where it wont be caught (recommended)EDIT: Scratch that, http://support.microsoft.com/kb/312629 has a couple of other suggestions to try, but I still recommend #2 above.
Upvotes: 41