Anilkumar
Anilkumar

Reputation: 1147

Cannot redirect after HTTP headers have been sent

When I try to redirect to another page through Response.Redirect(URL) am getting the following error:- System.Web.HttpException: Cannot redirect after HTTP headers have been sent.

I wrote one Response.Write("Sometext"); and Response.Flush() before calling redirect Method.

In this case how do we use Response.Redirect(URL)?

I'm executing a Stored procedure through Asynch call. The SP will take almost 3 min to execute. By that time I'll get load balancer timeout error from Server because this application is running in Cloud computer. For avoiding load balancer timeout I'm writing some text to browser (response.write() and Flush() ) .

Upvotes: 3

Views: 31111

Answers (7)

Ujjwal Saxena
Ujjwal Saxena

Reputation: 21

if (!Response.IsRequestBeingRedirected)
                    Response.Redirect("~/RMSPlusErrorPage.aspx?ErrorID=" + 100, false);

Upvotes: 1

elifekiz
elifekiz

Reputation: 1506

In my case, cause of the problem is that loading data in the scroll gridview is taking a long time. And before gridview data is not loaded completely, but I press the redirect button. I get this error.

You can lessen your data get

or

before loading completion prevent to press redirect button

Upvotes: 0

Try to do the following:

   catch (System.Threading.ThreadAbortException)
        {
            // To Handle HTTP Exception "Cannot redirect after HTTP headers have been sent".
        }
   catch (Exception e)
        {//Here you can put your context.response.redirect("page.aspx");}

Upvotes: 0

Jonats
Jonats

Reputation: 401

I had the same error and same approach. You might want to try using a javascript instead of directly calling Response.Redirect.

Response.Write("<script type='text/javascript'>");
Response.Write("window.location = '" + url + "'</script>");
Response.Flush();

Worked fine with me however I still need to check it on different browsers.

Upvotes: 2

treaschf
treaschf

Reputation: 5944

You won't get this error, if you redirect before the rendering of your page begins (for example when you redirect from the Load or PreRender events of the page).


I see now in your comments, that you would like to redirect after a long-running stored procedure completes. You might have to use a different approach in this case.

You could put for example an AJAX UpdatePanel with a Timer on your page, and the Timer could check in every few seconds whether the stored procedure has completed, and then do the redirection.

This approach also has the advantage, that you can put some "in progress" message on the page, while the procedure is running, so your user would know, that things are still happening.

Upvotes: 0

Don
Don

Reputation: 9661

You can't use Response.Redirect as you've gone past headers and written out "Sometext". You have to check (redirect condition) before you start writing out data to the client or make a META redirect.

If you want one of those pages that shows text and redirects after 5s META is your option.

Upvotes: 0

ThiefMaster
ThiefMaster

Reputation: 318468

You need to ensure that you do not write/flush anything before trying to send a HTTP header. After sending headers there is no proper way to do a redirect as the only things you can do are outputting JavaScript to do the redirect (bad) or sending a 'meta refresh/location' tag which will most likely not be at the correct position (inside HEAD) and thus result in invalid html.

Upvotes: 3

Related Questions