Please navigate to the bottom of the page for Table of Contents

Thursday, June 2, 2011

ASP.NET HttpHandlers

An ASP.NET HTTP handler is a process (frequently referred to as the "endpoint") that runs in response to a request made to an ASP.NET Web application. The most common handler is an ASP.NET page handler that processes .aspx files. When users request an .aspx file, the request is processed by the page through the page handler. You can create your own HTTP handlers that render custom output to the browser. Using HttpHandlers to serve up content you might normally serve using a standard ASP.NET page (such
as a dynamic file download request) can be a good idea in your application because it allows you to write a
specialized handler that eliminates some of the overhead of a standard ASP.NET handler. HttpHandlers are best suited for generating content such as RSS feeds and serving images.

Let’s write a simple HttpHandler that will return a requested image to the user. To add a handler to your web project, right click on your web project in solution explorer, select Add, New Item… and then select a Generic Handler. Visual Studio generates all the required plumbing for you as shown below:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication2
{
/// <summary>
/// Summary description for Handler1
/// </summary>
public class Handler1 : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}

public bool IsReusable
{
get
{
return false;
}
}
}
}


As it is apparent, the ProcessRequest method is the method you use to actually process the incoming HTTP request. Now let’s modify this code to serve up images requested by the user as a query string parameter. This would require us to parse the query string, change the content type and stream out the requested file as the response. Note that this example does not do error handling or content caching.


using System.Web;

namespace WebApplication2
{
/// <summary>
/// Summary description for Handler1
/// </summary>
public class Handler1 : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
// default to a generic image
string imageName = "GenericImage.jpg";

// parse user request
if (!string.IsNullOrEmpty(context.Request.QueryString["img"]))
imageName = context.Request.QueryString["img"];

// send the image file
context.Response.ContentType = "image/jpeg";
context.Response.WriteFile(imageName);
}

public bool IsReusable
{
get
{
return false;
}
}
}
}

The example above shows the use of a generic handler that handles the .ashx file extension. You can also server custom file extensions using almost the same code and adding new httpHandler entries to the web config file.

No comments:

Post a Comment