Karthik Ratnam
Karthik Ratnam

Reputation: 3130

Response.Redirect and thread was being aborted error?

I had this error Thread was being aborted., this afternoon in my error log.

The code that caused this error is:

Response.Redirect("Login.aspx", true);

If I change the bool value to false, the error log becomes empty and this error stops coming again, but the program stops working.

If I keep it as such, I am getting this error like nuisance.

I want to know the alternative for using Response.Redirect passing true as the value for the endResponse parameter.

Upvotes: 12

Views: 19346

Answers (4)

Prashant Agarwal
Prashant Agarwal

Reputation: 809

For all caught errors where you want to redirect, create a 'GoTo' destined out of the Try Catch as follows:

    Try 

       'do stuff

    Catch ex As Exception

        'logging
        GoTo MyRedirection

    End Try

    'Prevent redirection in case of no errors
    Exit Sub

MyRedirection:
    Response.Redirect("login.aspx", True)

This neither causes thread abortion nor requires multiple catches.

Upvotes: 1

Guest
Guest

Reputation: 31

As stated in Response.Redirect(url) ThreadAbortException Solution:

The ThreadAbortException is thrown when you make a call to Response.Redirect(url) because the system aborts processing of the current web page thread after it sends the redirect to the response stream. Response.Redirect(url) actually makes a call to Response.End() internally, and it's Response.End() that calls Thread.Abort() which bubbles up the stack to end the thread. Under rare circumstances the call to Response.End() actually doesn't call Thread.Abort(), but instead calls HttpApplication.CompleteRequest().

Or simply move Response.Redirect("~/Membership/UserRegistration.aspx"); out of the Try/Catch block.

Upvotes: 3

firefly
firefly

Reputation: 419

you can change like this Response.Redirect ("Login.aspx",false) then it wont abort.

Upvotes: 2

Colin Mackay
Colin Mackay

Reputation: 19175

I catch this exception and swallow it because ASP.NET is using exceptions for flow control rather than for an exceptional circumstance.

try
{
    // Do stuff.
}
catch(ThreadAbortException)
{
    // Do nothing. ASP.NET is redirecting.
    // Always comment this so other developers know why the exception 
    // is being swallowed.
}
catch(OtherExceptionTypes ex)
{
    // Log other types of exception.
}

Upvotes: 17

Related Questions