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.
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.
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.
Response.Redirect calls Response.End internally, so it throws the exception, use instead :
Response.Redirect(url, false);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With