IHttpHandlerFactory.GetHandler Method
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
Not applicable.
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.
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>