This blog has moved, permanently, to

Friday, July 8, 2011

HTTP Header Errors with MVC3 Redirects


We noticed in our error logs that we were getting quite a few of these good old errors:

"Cannot redirect after HTTP headers have been sent."
This wasn’t affecting our system from a usability point of view, but it’s irritating nonetheless. Anyway, the cause of the error was the following code in the OnActionExecuting override of a custom ActionFilterAttribute:
HttpContext.Current.Response.Redirect(“our url”, true)

Looks fine, right?

The error here is that within action filter attributes, you don’t know what other code is being executed in the request pipeline – in our case we had a BaseController adding caching headers in the OnResultExecuting override. 

The correct way to do this is to set the result of the filterContext object – this gets dealt with immediately and the error goes away.  The correct code is:

filterContext.Result = new RedirectResult(“our url”);

Pretty trivial, I know, but I Googled this and found very little out there that actually describes this error and the solution.


  1. This error doesn't happen on my develop machine(Win XP) and only happen on MVC3 + IIS7.

    The error msg is:
    System.Web.HttpException (0x80004005): Cannot redirect after HTTP headers have been sent.



Note: Only a member of this blog may post a comment.