Response.redirect raises "Thread was being aborted"
Asked Answered
B

5

64

I've a VB.NET code called when I need to delete an object from DB. On Page_load I check if it's not post back (to prevent a manual refresh) and, after the deletion of the object I redirect to the caller page using Response.redirect. At this point my code raise an

exception:EXCEPTION OCCURS In File_delete.aspx.vb Line Number: 34 Error Message: Thread was being aborted.

and, on Event Viewer I can see that aspnet_wp.exe crashes:

aspnet_wp.exe (PID: 1532) stopped unexpectedly.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

It's not clear why this happens only here because I use the response.redirect also to view the file and not only to delete it.

Balbur answered 2/2, 2011 at 13:8 Comment(1)
Close duplicate of https://mcmap.net/q/110486/-thread-was-being-abortedFireman
T
155

By default, Response.Redirect() aborts the current thread. Naturally, this throws a ThreadAbortException. It can be prevented by passing a false to Response.Redirect(), which won't abort the current thread.

Response.Redirect(url,false) 

Be aware of what that means, however. If the thread is not aborted, the code following the Response.Redirect() will continue to execute. Control your logic flow accordingly. (This is often done with return statements and other flow control directives following a redirect.)

Response.Redirect(url,false) 
Return
Tongue answered 2/2, 2011 at 13:22 Comment(1)
I got an exception because my method there is async keywordFoliate
S
24

Response.Redirect will always throw a ThreadAbortException, according to MSDN documentation if you don't give a false boolean value to endResponse input parameter HttpRequest.Redirect(string, bool).

Just give false to endResponse parameter.

Slovenly answered 2/2, 2011 at 13:17 Comment(5)
This is the recommended approach, you just need to be careful using this as code after the Response.Redirect will be executed.Concierge
After calling Response.Redirect(url, false) call HttpContext.Current.ApplicationInstance.CompleteRequest(); to terminate without an exception.Hindi
But the Page lifecycle continues, Postback events are handled, and html is sent to the client. See c6software.com/CodeSolutions/dotnet/ThreadAbortException.aspxHindi
@Hindi yes, After calling Response.Redirect(url, false), the following code in current page will be run, this is not my purpose. how to resolve it.Lithea
@Hindi No, it doesn't, the request continues with it's page life cycle.Farewell
A
6

The list of options for solving this issue laid out here worked for me (I used #2): https://gist.github.com/cemerson/9dea993044a4e7fdca0e

Allista answered 28/7, 2014 at 11:36 Comment(0)
B
0

Response.Redirect throws an exception by design. It is OK.

Bulger answered 2/2, 2011 at 13:17 Comment(1)
Why would it throw an exception ? I don't get the logic behind it.Keavy
M
0

This could happens when you are making asynchronous calls. Use Response.Redirect(string url, false) where string url is the redirect url.

Mackler answered 19/7, 2019 at 13:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.