首先要明白什么是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>
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