This documentation is archived and is not being maintained.

IHttpHandlerFactory.GetHandler Method

Returns an instance of a class that implements the IHttpHandler interface.

[Visual Basic]
Function GetHandler( _
   ByVal context As HttpContext, _
   ByVal requestType As String, _
   ByVal url As String, _
   ByVal pathTranslated As String _
) As IHttpHandler
[C#]
IHttpHandler GetHandler(
   HttpContext context,
 string requestType,
 string url,
 string pathTranslated
);
[C++]
IHttpHandler* GetHandler(
   HttpContext* context,
 String* requestType,
 String* url,
 String* pathTranslated
);
[JScript]
function GetHandler(
   context : HttpContext,
 requestType : String,
 url : String,
 pathTranslated : String
) : IHttpHandler;

Parameters

context
An instance of the HttpContext class that provides references to intrinsic server objects (For example, Request, Response, Session, and Server) used to service HTTP requests.
requestType
The HTTP data transfer method (GET or POST) that the client uses.
url
The RawUrl of the requested resource.
pathTranslated
The PhysicalApplicationPath to the requested resource.

Return Value

A new IHttpHandler object that processes the request.

Example

The following example creates custom handler objects in response to a client request for a page named either abc.aspx or xyz.aspx. The handler factory class named hwf creates the appropriate handler object depending on the page requested.

[Visual Basic] 
' Name this Visual Basic file HandlerFactoryTest.vb and compile it with 
' the command line: vbc /t:Library /r:System.Web.dll HandlerFactoryTest.vb.
' Copy HandlerFactoryTest.dll to your \bin directory.
Imports System
Imports System.Web

Namespace test    
    
    ' Factory class that creates a handler object based on a request 
    ' for either abc.aspx or xyz.aspx as specified in the Web.config file.
    Public Class MyFactory
        Implements IHttpHandlerFactory
        
        Public Overridable Function GetHandler(context As HttpContext, _
        requestType As String, url As String, pathTranslated As String) _
        As IHttpHandler _
        Implements IHttpHandlerFactory.GetHandler
        
            Dim fname As String = url.Substring(url.LastIndexOf("/"c) + 1)
            Dim cname As String = fname.Substring(0, fname.IndexOf("."c))
            Dim className As String = "test." & cname
            
            Dim h As Object = Nothing
            
            Try ' to create the handler object.
                ' Create by calling class abc or class xyz.
                h = Activator.CreateInstance(Type.GetType(className))
            Catch e As Exception
                Throw New HttpException("Factory couldn't create instance " & _
                    "of type " & className, e)
            End Try
            Return CType(h, IHttpHandler)
        End Function
        
        
        ' This is a must override method.
        Public Overridable Sub ReleaseHandler(handler As IHttpHandler) _
        Implements IHttpHandlerFactory.ReleaseHandler
        
        End Sub
        
    End Class
    
    
    ' Class definition for abc.aspx handler.
    Public Class abc
        Implements IHttpHandler
        
        Public Overridable Sub ProcessRequest(context As HttpContext) _
        Implements IHttpHandler.ProcessRequest
        
            context.Response.Write("<html><body>")
            context.Response.Write("<p>ABC Handler</p>" & _
                Microsoft.VisualBasic.ControlChars.CrLf)
            context.Response.Write("</body></html>")
        End Sub        
        
        Public Overridable ReadOnly Property IsReusable() As Boolean _
        Implements IHttpHandler.IsReusable
        
            Get
                Return True
            End Get
        End Property
    End Class
     
    ' Class definition for xyz.aspx handler.
    Public Class xyz
        Implements IHttpHandler
        
        Public Overridable Sub ProcessRequest(context As HttpContext) _
        Implements IHttpHandler.ProcessRequest
        
            context.Response.Write("<html><body>")
            context.Response.Write("<p>XYZ Handler</p>" & _
                Microsoft.VisualBasic.ControlChars.CrLf)
            context.Response.Write("</body></html>")
        End Sub
        
        
        Public Overridable ReadOnly Property IsReusable() As Boolean _
        Implements IHttpHandler.IsReusable
        
            Get
                Return True
            End Get
        End Property
    End Class
End Namespace

'______________________________________________________________
'
'To use the handler factory, use the following lines in a
'Web.config file. (be sure to remove the comment markers)
'
'<configuration>
'   <system.web>
'      <httpHandlers>
'         <add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest" />
'         <add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest" />
'      </httpHandlers>
'   </system.web>
'</configuration>



[C#] 
// Name this C# file HandlerFactoryTest.cs and compile it with the
// command line: csc /t:Library /r:System.Web.dll HandlerFactoryTest.cs.
// Copy HandlerFactoryTest.dll to your \bin directory.

namespace test
{
   using System;
   using System.Web;

   // Factory class that creates a handler object based on a request 
   // for either abc.aspx or xyz.aspx as specified in the Web.config file.
   public class MyFactory : IHttpHandlerFactory
   {
      public virtual IHttpHandler GetHandler(HttpContext context, 
                                             String requestType, 
                                             String url, 
                                             String pathTranslated)
      {
         String fname = url.Substring(url.LastIndexOf('/')+1);
         String cname = fname.Substring(0, fname.IndexOf('.'));
         String className = "test." + cname;

         Object h = null;

         // Try to create the handler object.
         try 
         {
            // Create the handler by calling class abc or class xyz.
            h = Activator.CreateInstance(Type.GetType(className));
         }
         catch(Exception e)
         {
            throw new HttpException("Factory couldn't create instance " +
                                    "of type " + className, e);
         }
         return (IHttpHandler)h;
      }

      // This is a must override method.
      public virtual void ReleaseHandler(IHttpHandler handler)
      {
      }
   }
   
   // Class definition for abc.aspx handler.
   public class abc : IHttpHandler
   {
      public virtual void ProcessRequest(HttpContext context)
      {
         context.Response.Write("<html><body>");
         context.Response.Write("<p>ABC Handler</p>\n");
         context.Response.Write("</body></html>");
      }
    
      public virtual bool IsReusable
      {
         get { return true; }
      }
   }

   // Class definition for xyz.aspx handler.
   public class xyz : IHttpHandler
   {
      public virtual void ProcessRequest(HttpContext context)
      {
         context.Response.Write("<html><body>");
         context.Response.Write("<p>XYZ Handler</p>\n");
         context.Response.Write("</body></html>");
      }
    
      public virtual bool IsReusable
      {
         get { return true; }
      }
   }
}

/*
______________________________________________________________

To use the handler factory, use the following lines in a 
Web.config file.

<configuration>
   <system.web>
      <httpHandlers>
         <add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest" />
         <add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest" />
      </httpHandlers>     
   </system.web>
</configuration>
*/
   

[C++] 
#using <mscorlib.dll>
#using <System.Web.dll>
// Name this C++ file HandlerFactoryTest.cs and compile it with the
// command line
//    cl /clr /LD HandlerFactoryTest.cpp
// Copy HandlerFactoryTest.dll to your \bin directory.

namespace test
{
   using namespace System;
   using namespace System::Web;

   // Factory class that creates a handler object based on a request 
   // for either abc.aspx or xyz.aspx as specified in the Web.config file.
   public __gc class MyFactory : public IHttpHandlerFactory
   {
   public:
      virtual IHttpHandler* GetHandler(HttpContext* /*context*/, 
         String* /*requestType*/, 
         String* url, 
         String* /*pathTranslated*/)
      {
         String* fname = url->Substring(url->LastIndexOf('/')+1);
         String* cname = fname->Substring(0, fname->IndexOf('.'));
         String* className = String::Format( S"test.{0}", cname );

         Object* h = 0;

         // Try to create the handler object.
         try 
         {
            // Create the handler by calling class abc or class xyz.
            h = Activator::CreateInstance(Type::GetType(className));
         }
         catch(Exception* e)
         {
            throw new HttpException(String::Format( S"Factory couldn't create instance of type {0}", className ), e);
         }
         return dynamic_cast<IHttpHandler*>(h);
      }

      // This is a must override method.
      virtual void ReleaseHandler(IHttpHandler* /*handler*/)
      {
      }
   };

   // Class definition for abc.aspx handler.
   public __gc class abc : public IHttpHandler
   {
   public:
      virtual void ProcessRequest(HttpContext* context)
      {
         context->Response->Write(S"<html><body>");
         context->Response->Write(S"<p>ABC Handler</p>\n");
         context->Response->Write(S"</body></html>");
      }

      __property virtual bool get_IsReusable() { return true; }

   };

   // Class definition for xyz.aspx handler.
   public __gc class xyz : public IHttpHandler
   {
   public:
      virtual void ProcessRequest(HttpContext* context)
      {
         context->Response->Write(S"<html><body>");
         context->Response->Write(S"<p>XYZ Handler</p>\n");
         context->Response->Write(S"</body></html>");
      }

      __property virtual bool get_IsReusable() { return true; }

   };
}

/*
______________________________________________________________

To use the handler factory, use the following lines in a 
Web.config file.

<configuration>
   <system.web>
      <httpHandlers>
         <add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest" />
         <add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest" />
      </httpHandlers>     
   </system.web>
</configuration>
*/
   

[JScript] 
// Name this JScript file HandlerFactoryTest.js and compile it with 
// the command line: jsc /t:library /r:System.Web.dll HandlerFactoryTest.js.
// Copy HandlerFactoryTest.dll to your bin directory.
import System
import System.Web

package test{
    
    // Factory class that creates a handler object based on request 
    // for either abc.aspx or xyz.aspx : specified in web.config.
    class MyFactory implements IHttpHandlerFactory{
        
        function IHttpHandlerFactory.GetHandler(context : HttpContext, requestType : String, url : String, pathTranslated : String) : IHttpHandler{

            var fname : String = url.Substring(url.LastIndexOf(Char("/")) + 1)
            var cname : String = fname.Substring(0, fname.IndexOf(Char(".")))
            var className : String = "test." + cname

            var h : Object = null

            try{// to create the handler object.
                // Create by calling class abc or class xyz.
                h = Activator.CreateInstance(Type.GetType(className))
            }catch(e : Exception){
                throw new HttpException("Factory couldn't create instance of type " + className, e)
            }
            return IHttpHandler(h)
        }

        // Must override this class.
        function IHttpHandlerFactory.ReleaseHandler(handler : IHttpHandler){
        }
        
    }
    
    
    // Class definition for abc.aspx handler.
    class abc implements IHttpHandler{
        
        function IHttpHandler.ProcessRequest(context : HttpContext){
            context.Response.Write("<html><body>")
            context.Response.Write("<p>ABC Handler</p>\r\n")
            context.Response.Write("</body></html>")
        }        
        
        function get IHttpHandler.IsReusable() : Boolean{
            return true
        }
    }
     
    // Class definition for xyz.aspx handler.
    class xyz implements IHttpHandler{
        
        function IHttpHandler.ProcessRequest(context : HttpContext){
            context.Response.Write("<html><body>")
            context.Response.Write("<p>XYZ Handler</p>\r\n")
            context.Response.Write("</body></html>")
        }
        
        
        function get IHttpHandler.IsReusable() : Boolean{
            return true
        }
    }
}

//______________________________________________________________
//
//To use the above handler factory, use the following lines in a
//Web.config file. (remove the comment markers)
//
//<configuration>
//   <system.web>
//      <httpHandlers>
//         <add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest" />
//         <add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest" />
//      </httpHandlers>
//   </system.web>
//</configuration>


To use the above handler factory, add the following lines to the Web.config file.

<configuration> <system.web> <httpHandlers> <add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest"/> <add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest"/> </httpHandlers> </system.web></configuration>

Requirements

Platforms: Windows 2000, Windows XP Professional, Windows Server 2003 family

See Also

IHttpHandlerFactory Interface | IHttpHandlerFactory Members | System.Web Namespace

Show: