"Thread was being aborted" exception on redirect - VERY weird!!

Discussion in 'Microsoft ASP .NET' started by Alan Silver, Dec 6, 2005.

  1. Alan Silver

    Alan Silver Guest

    Hello,

    I have a page that is supposed to do some checking, and if OK, set a
    session variable before redirecting to another page. The following code
    is a simplified version, I have hard-coded the basket ID and removed a
    load of extra checking...

    public partial class GoToCheckout : Page {
    public void Page_Load(Object o, EventArgs e) {
    try {
    Session["basketid"] = "178";
    //x.Text = "redirecting to PreCheckout.aspx";
    Response.Redirect("PreCheckout.aspx");
    } catch (Exception ex) {
    Response.Redirect("/?msg=" + ex.Message);
    //x.Text = "exception - " + ex.Message;
    }
    }
    }

    When this page is called, it throws a "Thread was being aborted"
    exception when it hits the line...

    Response.Redirect("PreCheckout.aspx");

    The catch block picks it up and redirects to the home page, putting the
    exception message in the querystring. I did this because if I comment
    out the redirect in the catch and instead use the (commented out) x.Text
    bit (x is a literal, put on the otherwise empty .aspx file for
    debugging), then the redirect works fine!!

    If I comment out the redirect in the try block and uncomment the x.Text
    line there, then the page displays the message "redirecting to
    PreCheckout.aspx" exactly as expected.

    So, it seems there's some weird problem with the redirect, but I can't
    work it out. Nor can I work out why changing the behaviour of the code
    in the catch block changes whether the exception is raised or not.

    This code has been working fine for a few months now. I have recently
    been changing pages to use master pages and themes, which is when I
    noticed the problem. However, if I now change this page back to not use
    a master or theme, the problem is still there. I am totally baffled, and
    would appreciate any help you can offer. TIA

    --
    Alan Silver
    (anything added below this line is nothing to do with me)
     
    Alan Silver, Dec 6, 2005
    #1
    1. Advertisements

  2. Alan Silver

    Joey Guest

    There is a second, optional parameter to the Response.Redirect call. It
    is a boolean value that indicates whether or not to continue processing
    the current page. Set it to false, and you should not get the errors
    anymore.

    Example:

    Response.Redirect("PreCheckout.aspx", false);

    JP

    Alan Silver wrote:
    > Hello,
    >
    > I have a page that is supposed to do some checking, and if OK, set a
    > session variable before redirecting to another page. The following code
    > is a simplified version, I have hard-coded the basket ID and removed a
    > load of extra checking...
    >
    > public partial class GoToCheckout : Page {
    > public void Page_Load(Object o, EventArgs e) {
    > try {
    > Session["basketid"] = "178";
    > //x.Text = "redirecting to PreCheckout.aspx";
    > Response.Redirect("PreCheckout.aspx");
    > } catch (Exception ex) {
    > Response.Redirect("/?msg=" + ex.Message);
    > //x.Text = "exception - " + ex.Message;
    > }
    > }
    > }
    >
    > When this page is called, it throws a "Thread was being aborted"
    > exception when it hits the line...
    >
    > Response.Redirect("PreCheckout.aspx");
    >
    > The catch block picks it up and redirects to the home page, putting the
    > exception message in the querystring. I did this because if I comment
    > out the redirect in the catch and instead use the (commented out) x.Text
    > bit (x is a literal, put on the otherwise empty .aspx file for
    > debugging), then the redirect works fine!!
    >
    > If I comment out the redirect in the try block and uncomment the x.Text
    > line there, then the page displays the message "redirecting to
    > PreCheckout.aspx" exactly as expected.
    >
    > So, it seems there's some weird problem with the redirect, but I can't
    > work it out. Nor can I work out why changing the behaviour of the code
    > in the catch block changes whether the exception is raised or not.
    >
    > This code has been working fine for a few months now. I have recently
    > been changing pages to use master pages and themes, which is when I
    > noticed the problem. However, if I now change this page back to not use
    > a master or theme, the problem is still there. I am totally baffled, and
    > would appreciate any help you can offer. TIA
    >
    > --
    > Alan Silver
    > (anything added below this line is nothing to do with me)
     
    Joey, Dec 6, 2005
    #2
    1. Advertisements

  3. I think what's happening is that your first Redirect is ending the page
    execution, and thus the request/response. Try passing in "false" as a
    second param to Redirect to see if that helps; it tells the redirect not to
    end the thread on that call. Another option, since you're within your
    application, is to use Server.Transfer instead, as it's more efficient
    within the app.
     
    Keith Patrick, Dec 6, 2005
    #3
  4. Alan Silver

    Alan Silver Guest

    >There is a second, optional parameter to the Response.Redirect call. It
    >is a boolean value that indicates whether or not to continue processing
    >the current page. Set it to false, and you should not get the errors
    >anymore.


    Thanks for the reply. Shortly after posting (ain't that always the
    way!!), I found http://tinyurl.com/cj3qp where someone points out that
    using Response.Redirect inside a try/catch blocks throws this exception.
    I moved it outside the block and the problem went away.

    I may change it back and try it with this second parameter though as the
    code was neater before.

    Thanks for the reply.

    --
    Alan Silver
    (anything added below this line is nothing to do with me)
     
    Alan Silver, Dec 6, 2005
    #4
  5. Alan Silver

    Alan Silver Guest

    >I think what's happening is that your first Redirect is ending the page
    >execution, and thus the request/response. Try passing in "false" as a
    >second param to Redirect to see if that helps; it tells the redirect not to
    >end the thread on that call. Another option, since you're within your
    >application, is to use Server.Transfer instead, as it's more efficient
    >within the app.


    Thanks. See my reply to Joey ;-)

    --
    Alan Silver
    (anything added below this line is nothing to do with me)
     
    Alan Silver, Dec 6, 2005
    #5
  6. Alan Silver

    Alan Silver Guest

    >I may change it back and try it with this second parameter though as
    >the code was neater before.


    I did, and it was ;-)

    Thanks again to both of you

    --
    Alan Silver
    (anything added below this line is nothing to do with me)
     
    Alan Silver, Dec 6, 2005
    #6
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. GSK

    Thread was being aborted in Response.Redirect

    GSK, Jun 8, 2004, in forum: Microsoft ASP .NET
    Replies:
    1
    Views:
    369
    bruce barker
    Jun 8, 2004
  2. Stephen Miller
    Replies:
    3
    Views:
    754
    Stephen Miller
    Jul 2, 2004
  3. Johanna
    Replies:
    0
    Views:
    278
    Johanna
    Oct 13, 2004
  4. Guest
    Replies:
    3
    Views:
    388
    Guest
    Oct 15, 2004
  5. Jeff

    Exception: Thread was being aborted

    Jeff, Dec 16, 2005, in forum: Microsoft ASP .NET
    Replies:
    2
    Views:
    243
Loading...

Share This Page