Export (0) Print
Expand All

IHttpHandlerFactory.GetHandler Method

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

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

IHttpHandler GetHandler (
	HttpContext context,
	string requestType,
	string url,
	string pathTranslated
)
IHttpHandler GetHandler (
	HttpContext context, 
	String requestType, 
	String url, 
	String pathTranslated
)
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.

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 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
   {
      [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
      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>
*/
   

package test; 
// Name this J# file HandlerFactoryTest.jsl and compile it with the
// command line: vjc /t:Library /r:System.Web.dll HandlerFactoryTest.jsl.
// Copy HandlerFactoryTest.dll to your \bin directory.

import System.*;
import 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 implements IHttpHandlerFactory
{
    public IHttpHandler GetHandler(HttpContext context, String requestType,
        String url, String pathTranslated) throws HttpException
    {
        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 (System.Exception e) {
            throw new HttpException("Factory couldn't create instance "
                + "of type " + className, e);
        }
        return ((IHttpHandler)h);
    } //GetHandler

    // This is a must override method.
    public void ReleaseHandler(IHttpHandler handler)
    {
    } //ReleaseHandler
} //MyFactory

// Class definition for abc.aspx handler.
public class abc implements IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.get_Response().Write("<html><body>");
        context.get_Response().Write("<p>ABC Handler</p>\n");
        context.get_Response().Write("</body></html>");
    } //ProcessRequest

    /** @property 
     */
    public boolean get_IsReusable()
    {
        return true;
    } //get_IsReusable
} //abc

// Class definition for xyz.aspx handler.
public class xyz implements IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.get_Response().Write("<html><body>");
        context.get_Response().Write("<p>XYZ Handler</p>\n");
        context.get_Response().Write("</body></html>");
    } //ProcessRequest

    /** @property 
     */
    public boolean get_IsReusable()
    {
        return true;
    } //get_IsReusable
} //xyz

/*
______________________________________________________________

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>
*/


// 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>



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> 

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Framework

Supported in: 2.0, 1.1, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft