HttpHandler Factory
You can generate a new handler instance for each HTTP request by creating a class that implements the IHttpHandlerFactory interface. In the following example, a HttpHandler factory is used to create different handlers for an HTTP GET request and an HTTP POST request. One of the handlers is an instance of the synchronous handler in the example above; the other handler is an instance of the asynchronous handler example.
using System;
using System.Web;
namespace Handlers
{
class HandlerFactory : IHttpHandlerFactory
{
public IHttpHandler GetHandler(HttpContext context, string requestType, String url, String pathTranslated)
{
IHttpHandler handlerToReturn;
if("get" == context.Request.RequestType.ToLower())
{
handlerToReturn = new SynchHandler();
}
else if("post" == context.Request.RequestType.ToLower())
{
handlerToReturn = new AsynchHandler();
}
else
{
handlerToReturn = null;
}
return handlerToReturn;
}
public void ReleaseHandler(IHttpHandler handler)
{
}
public bool IsReusable
{
get
{
// To enable pooling, return true here.
// This keeps the handler in memory.
return false;
}
}
}
}
[VisualĀ Basic]
Imports System
Imports System.Web
Namespace Handlers
Class HandlerFactory
Implements IHttpHandlerFactory
Public Function GetHandler(ByVal context As HttpContext, ByVal requestType As String, ByVal url As [String], ByVal pathTranslated As [String]) As IHttpHandler Implements IHttpHandlerFactory.GetHandler
Dim handlerToReturn As IHttpHandler
If "get" = context.Request.RequestType.ToLower() Then
handlerToReturn = New SynchHandler()
Else
If "post" = context.Request.RequestType.ToLower() Then
handlerToReturn = New AsynchHandler()
Else
handlerToReturn = Nothing
End If
End If
Return handlerToReturn
End Function
Public Sub ReleaseHandler(ByVal handler As IHttpHandler) Implements IHttpHandlerFactory.ReleaseHandler
End Sub
Public ReadOnly Property IsReusable() As Boolean
Get
' To enable pooling, return true here.
' This keeps the handler in memory.
Return False
End Get
End Property
End Class
End Namespace
Register your custom HttpHandler factory by creating an entry in Web.config as follows:
<configuration>
<system.web>
<httpHandlers>
<add verb="GET,POST" path="*.MyFactory"
type="Handlers.HandlerFactory, Handlers" />
</httpHandlers>
</system.web>
</configuration>