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.
Thank you for this piece of code ;).
Comment by Kasic — March 2, 2008 @ 9:47 pm
No problem Kasic. I’m just glad to be able to help.
Comment by peteohanlon — March 3, 2008 @ 8:50 am