ASP.NET的HTTP模块和处理程序之处理程序的执行

开发 后端
为了实现扩充或扩展Web服务器的功能,ASP.NET提供了HttpHandler(HTTP处理程序)和HttpModule(HTTP模块),这里,笔者将带各位深入了解这些组件的详细信息。在之前,我们已经介绍了一部分,这篇文章,笔者将向大家介绍ASP.NET的HTTP处理程序的执行及使用方法。

  ASP.NET运行时对HTTP处理程序的使用方式

  无论你是否相信,ASP.NET都使用HTTP请求实现了大量的自己的功能。ASP.NET使用处理程序来处理.aspx、.asmx、.soap和其它ASP.NET文件。

  下面是machine.config文件中的一个片段:

  1. <httpHandlers>  
  2. <add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler"/>  
  3. <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>  
  4. <add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory"/>  
  5. <add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler"/>  
  6. <add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler"/>  
  7.  . . . . . .   
  8.  . . . . . .  
  9. </httpHandlers> 

  在上面的配置信息中你可以看到对.aspx文件的所有请求都由System.Web.UI.PageHandlerFactory类来处理。与此类似,对.config文件和其它文件(它们不能被客户端直接访问)的所有请求都由System.Web.HttpForbiddenHandler类处理。你可能已经猜到,当访问这些文件的时候,该类简单地给客户端返回一个错误信息。

  执行HTTP处理程序

  现在你将看到如何实现一个HTTP处理程序。那么我们的新处理程序要做什么任务呢?前面我提到,处理程序大多数用于给Web服务器添加新功能;因此,我将建立一个处理程序来处理新的文件类型——扩展名为.15seconds的文件。我们建立了这个处理程序并在我们的Web应用程序的web.config文件中注册之后,所有对.15seconds文件的请求都将由这个新处理程序来处理。

  你可能正在考虑这个处理程序的使用方法。如果你希望引入一种新的服务器脚本语言或动态服务器文件(例如asp、aspx)该怎么办呢?你可以为它编写一个自己的处理程序。类似地,如果你希望在IIS上运行Java小程序、JSP和其它一些服务器端Java组件应该怎么办呢?一种方法是安装某些ISAPI扩展(例如Allaire或Macromedia Jrun)。你也可以编写自己的HTTP处理程序。尽管这对于第三方厂商(例如Allaire和Macromedia)来说是很复杂的事务,但是它却是个很有吸引力的选择,因为它们的HTTP处理能够能够访问ASP.NET运行时暴露的所有新功能。

  实现我们的HTTP处理程序包含以下步骤:

  1.编写一个实现IHttpHandler接口的类。

  2. 在web.config或machine.config文件中注册这个处理程序。

  3.在Internet服务管理器中把文件扩展(.15seconds)映射到ASP.NET ISAPI扩展DLL(aspnet_isapi.dll)上。

  ***步

  在Visual Studio.NET中建立一个新的C#类库项目,并把它命名为“MyHandler”。Visual Studio.NET将自动地给项目添加一个叫做“Class1.cs”的类。把它改名为“NewHandler”;在代码窗口中打开这个类,并把类的名称和构造函数的名称改成“NewHandler”。

  下面是NewHandler类的代码:

  1. using System;  
  2. using System.Web;  
  3.  
  4. namespace MyHandler  
  5. {  
  6.  public class NewHandler : IHttpHandler  
  7.  {  
  8.   public NewHandler()  
  9.   {  
  10.    // TODO: 此处添加构造逻辑  
  11.   }  
  12.  
  13.   #region Implementation of IHttpHandler  
  14.   public void ProcessRequest(System.Web.HttpContext context)  
  15.   {  
  16.    HttpResponse objResponse = context.Response ;  
  17.    objResponse.Write("<html><body><h1>Hello 15Seconds Reader ") ;  
  18.    objResponse.Write("</body></html>") ;  
  19.   }  
  20.  
  21.   public bool IsReusable  
  22.   {  
  23.    get  
  24.    {  
  25.     return true;  
  26.    }  
  27.   }  
  28.   #endregion  
  29.  }  

  你在ProcessRequest方法中可以看到,该HTTP处理程序通过System.Web.HttpContext对象访问了所有作为参数传递给它的ASP.NET内部对象。实现ProcessRequest方法只需要简单地从context对象中提取HttpResponse对象并把发送一些HTML给客户端。类似地,IsReusable返回true,表明这个处理程序可以被重复用作处理其它的HTTP请求。

  我们编译上面的代码并把它放到webapp虚拟目录的bin目录之中。

  第二步

  在web.config文件中通过添加下面的文本来注册这个处理程序:

  1. <httpHandlers>  
  2. <add verb="*" path="*.15seconds" type="MyHandler.NewHandler,MyHandler"/>  
  3. </httpHandlers> 

  第三步

  由于我们已经建立了用于处理新扩展文件的处理程序了,我们还需要把这个扩展名告诉IIS并把它映射到ASP.NET。如果你不执行这个步骤而试图访问Hello.15seconds文件,IIS将简单地返回该文件而不是把它传递给ASP.NET运行时。其结果是该HTTP处理程序不会被调用。

  运行Internet服务管理器,右键点击默认Web站点,选择属性,移动到Home目录选项页,并点击配置按钮。应用程序配置对话框弹出来了。点击添加按钮并在可执行字段输入aspnet_isapi.dll文件路径,在扩展字段输入.15seconds。其它字段不用处理;该对话框如下所示:

 

 

  点击确认按钮关闭应用程序配置和默认Web站点属性对话框。

  现在我们运行Internet Explorer并输入url:http://localhost/webapp/hello.15seconds,看到的页面如下: 

 

【编辑推荐】

  1. ASP.NET的HTTP模块和处理程序
  2. ASP.NET的HTTP模块和处理程序之请求的处理过程
  3. ASP.NET的HTTP模块和处理程序之对话状态
  4. ASP.NET的HTTP模块和处理程序之HTTP模块的注册和使用
  5. ASP.NET的HTTP模块和处理程序之模块实现
责任编辑:韩亚珊 来源: 天极网
相关推荐

2011-04-13 15:18:10

.htmHTTP请求处理

2011-04-13 16:59:41

HTTPASP.NET

2011-04-13 16:49:26

HTTPASP.NET

2011-04-13 16:35:47

HTTPASP.NET

2011-04-13 15:50:49

.htmHTTP请求处理

2009-07-27 13:25:15

Postback程序处ASP.NET

2009-08-04 11:46:09

2009-07-20 16:04:37

ASP.NET fra

2009-07-29 15:51:29

ASP.NET中执行w

2009-07-28 18:00:11

ASP.NET程序

2010-05-06 13:33:47

Asp.Net负载均衡

2009-07-29 17:20:18

应用程序异常

2009-08-06 11:05:48

ASP.NET服务器控

2009-08-14 17:57:43

ASP.NET MVC

2009-07-23 16:28:55

2009-08-05 16:04:50

2009-07-29 17:21:10

2009-06-19 16:20:14

ASP.NET错误处理

2009-07-20 16:14:39

ASP.NET运行时

2009-02-06 14:11:36

ASP.NET.NET全局异常处理
点赞
收藏

51CTO技术栈公众号