Musings and frustrations

March 2, 2008

Returning status 500 from an HttpHandler

Filed under: Web development — peteohanlon @ 8:28 pm

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 Comments »

  1. Thank you for this piece of code ;).

    Comment by Kasic — March 2, 2008 @ 9:47 pm

  2. No problem Kasic. I’m just glad to be able to help.

    Comment by peteohanlon — March 3, 2008 @ 8:50 am

RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.