IHttpHandlerFactory.GetHandler Method (HttpContext, String, String, String)

 

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

Namespace:   System.Web
Assembly:  System.Web (in System.Web.dll)

Function GetHandler (
	context As HttpContext,
	requestType As String,
	url As String,
	pathTranslated As String
) As IHttpHandler

Parameters

context
Type: System.Web.HttpContext

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
Type: System.String

The HTTP data transfer method (GET or POST) that the client uses.

url
Type: System.String

The RawUrl of the requested resource.

pathTranslated
Type: System.String

The PhysicalApplicationPath to the requested resource.

Return Value

Type: System.Web.IHttpHandler

A new IHttpHandler object that processes the request.

The following code example demonstrates how to create custom handler objects in response to a client request. The example has two parts:

  • A handler factory class.

  • A Web.config file excerpt.

The first part of the example shows how to create 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.

' 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

        <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
        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>


The second part of the example shows a Web.config file excerpt. 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> 

.NET Framework
Available since 1.1
Return to top
Show: