Http模块和http处理程序

时间:2014-07-22 23:17:25   收藏:0   阅读:526

首先要明白什么是http处理程序(what),处理程序用于处理各个终结点请求,处理程序使ASP.NET框架可以处理应用程序内的单组 HTTP URL 或成组的 URL 扩展,与模块不同,只有一个处理程序用于处理请求,所有的处理程序都必须实现IHttpHandler接口,该接口位于system。Web命名空间下,处理程序在某些方面与Internet服务器应用程序编程接口(ISAPI)扩展类似。就是相当于一个Http管道扩展的组件。

下面是一个http处理程序的举例:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

 

namespace MasterTest
{
    /// <summary>
    /// 处理.sample为拓展名的请求,该文件不必实际存在
    /// </summary>
    public class SampleHandler:IHttpHandler
    {
        /// <summary>
        /// 是否可重复使用,true可重复使用,即常驻内存,false表示不可重用
        /// </summary>
        public bool IsReusable
        {
            get { return false; }
        }
        /// <summary>
        /// 处理请求
        /// </summary>
        /// <param name="context">请求上下文</param>
        public void ProcessRequest(HttpContext context)
        {
            HttpRequest request = context.Request;
            HttpResponse Response = context.Response;
            Response.Write("<html>");
            Response.Write("<body>");
            Response.Write("<h1>这是一个自定义请求处理类</h1>");
            Response.Write("</body>");
            Response.Write("</html>");
        }
    }
}

配置文件如下

<?xml version="1.0"?>
<configuration>

    <system.web>
     
      <httpHandlers>
        <add verb="*" path="*.sample" type="MasterTest.SampleHandler"/>
      </httpHandlers>
    </system.web>
 
 
</configuration>

 

Http模块在执行处理程序前后调用。模块使开发人员可以截获、参与或修改各个请求。模块实现 IHttpModule 接口,该接口位于System.Web 名称空间中。

HttpApplication 类提供有大量事件,模块可以与这些事件同步。对于每个请求,模块都可以与下列事件同步。这些事件是按先后顺序列出的:

对于每个请求传输,模块都可以与下列事件同步。这些事件的顺序不是固定的。

 HTTP模块就相对于一个ISAPI滤波

ASP.Net请求原理概述: 

  ASP.NET请求处理过程是基于管道模型的,在模型中ASP.NET把http请求传递给管道的各个模块,每个模块都接收http请求并拥有完全控制权限。模块可以用任何自认为合适的方式处理请求,一旦请求通过了所有的Http模块,就最终被HTTP处理程序处理。之后http处理程序将对请求进行一些处理,并把结果再次经过管道中的http模块。

特别注意的是http请求的处理过程中,只能调用一个Http处理程序,然而可以调用多个http模块。

 

可以使用web.config或者machine.config文件把这些类映射到http请求上。映射完成以后,当接收到相应请求的时候ASP.NET会实例化http处理程序。我们将解释如何在web.config和/或machine.config文件中定义所有这些细节信息。

 

ASP.NET还通过IHttpHandlerFactory接口支持http处理程序的扩展。ASP.NET提供了把http请求路由到实现IHttpHandlerFactory接口的类的对象上的能力。此外,ASP.NET还利用了Factory设计模式。这种模式为建立一组相关对象而不提供具体类的功能提供了接口。简单的说,你可以把用于建立依赖传递进来的参数建立的http处理程序对象的类看作是factory(工厂)。我们不用指定需要实例化的特定的http处理程序;http处理程序工厂处理这种事务。这样做的优点在于如果未来实现IHttpHandler接口的对象的实现方法发生了改变,只要接口仍然相同,客户端就不会受到影响。

原文:http://www.cnblogs.com/fartherfuture/p/3514066.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!