Returning status 500 from an HttpHandler

Recently, on The Code Project, a question was posted about returning the status 500 and it not actually working. I suggested that an HttpHandler would be the way to cope with this, and the original poster asked how to do this. Rather than posting the answer there, I decided to post it here. Without further ado, this is how it is done:

/// <summary> 
/// Base class for ensuring that the handler always returns 
/// a status code. 
/// </summary> 
public abstract class StatusHandlerBase : IHttpHandler 
{ 
  private int _returnStatus = 400; 
  /// <summary> 
  /// Initializes a new instance of <see cref="StatusHandlerBase" />. 
  /// </summary> 
  public StatusHandlerBase() {} 
  /// <summary> 
  /// Initializes a new instance of <see cref="StatusHandlerBase" />. 
  /// </summary> 
  /// <param ref="status">The Http status code</param> 
  public StatusHandlerBase(int status) 
  { 
    _returnStatus = status; 
  } 
  /// <summary> 
  /// Don't let the response be cached by the browser. Set up the status code 
  /// and return. 
  /// </summary> 
  public virtual void ProcessRequest(HttpContext context) 
  { 
    context.Response.Cache.SetCacheablity(HttpCacheability.NoCache); 
    context.Response.Cache.SetNoStore(); 
    context.Response.Cache.SetExpires(DateTime.MinValue);     ParseStatusCode(context, _returnStatus); 
  }   /// <summary> 
  /// Actually set up the status code at this point, and return. 
  /// </summary> 
  protected virtual void ParseStatusCode(HttpContext context, int statusCode) 
  { 
    context.Response.StatusCode = statusCode; 
    context.Response.End(); 
  }   public bool IsReusable 
  { 
    get { return true; } 
  } 
} /// <summary> 
/// This concrete implementation of the <see cref="StatusHandlerBase" /> class 
/// sets up the http handler to return a status code of 500. 
/// </summary> 
public class Return500 : StatusHandlerBase 
{ 
  public Return500() : base(500) {} 
}

Now, one of the things I always like to do is to look for ways to abstract so even in a relatively trivial example like this, there’s abstraction. I’m sorry, but there you go – personality quirk and all of that. There you go though, an HttpHandler that returns a 500 status.

2 thoughts on “Returning status 500 from an HttpHandler

Leave a comment