Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do I get a thrown exception when I run Response.Redirect()?

Tags:

c#

.net

asp.net

I am learning ASP.NET and was looking at QueryStrings.

One of the examples I was looking at hooks a button up to a redirect call:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        try
        {
            //throws ThreadAbortException: "Thread was being aborted"
            Response.Redirect("Form2.aspx");
        }
        catch (Exception Ex)
        {
            System.Diagnostics.Debug.WriteLine(Ex.Message);
        }
    }

Why does it throw a ThreadAbortException here? Is that normal? Should I do something about this? Exceptions are generally not a good thing, so I was alarmed when I saw this.

like image 571
MedicineMan Avatar asked Sep 01 '09 21:09

MedicineMan


3 Answers

This is by design. This KB article describes the behavior (also for the Request.End() and Server.Transfer() methods).

For Response.Redirect() there exists an overload:

Response.Redirect(String url, bool endResponse)

If you pass endResponse=false, then the exception is not thrown (but the runtime will continue processing the current request).

If endResponse=true (or if you use the overload without the bool argument), the exception is thrown and the current request will immediately be terminated.

like image 105
M4N Avatar answered Sep 21 '22 11:09

M4N


This is normal. Server.Transfer() also throws the same exception.

This is because internally, both methods call Response.End(), which aborts the current request processing immediately. Rick Strahl has a pretty good blog post that analyzes why there is pretty much nothing you can do to avoid these exceptions.

like image 35
womp Avatar answered Sep 23 '22 11:09

womp


Response.Redirect calls Response.End internally, so it throws the exception, use instead :

Response.Redirect(url, false);
like image 27
Canavar Avatar answered Sep 24 '22 11:09

Canavar