一、HttpModule对象(重点)
1、ASP.NET运行机制
1)客户端发送请求
2)服务器端IIS接收请求,根据请求的文件类型(文件扩展名)分发给对应的“运行时”程序进行处理
3)如果配置有HttpModule,就会经过一或多个HttpModule层层处理
4)请求最终会到达HttpHandler,进行最终的处理
5)请求经过处理后原路返回
2、HttpModule与HttpHandler的区别:
1)HttpModule是HTTP请求处理的中点,HttpHandler是终点
2)对于同一HTTP请求,HttpModule可以配置多个,而HttpHandler只有一个
3、HttpModule对象的使用步骤:
1)定义一个类,实现IHttpModule接口
2)在Init()方法中绑定相应事件,编写功能代码
3)配置web.config:
<system.webServer>
<modules>
<add name="testModule" type="WebApp_Demo1.Modules.TestHttpModule"/>
</modules>
</system.webServer>
4、HttpModule通常用于执行页面之前的全局处理,可以实现诸如过滤器的效果。常见场景比如:实现登录验证、URL重写。
5、using语句创建的对象要求必须实现IDisposable接口,该接口定义的成员方法Dispose()用于执行手工清理工作。
二、HttpHandler对象(重点)
1、HttpHandler有三种实现方式:
1)web窗体(aspx):用于需要使用控件、生成页面HTML代码的场景。
2)自定义HttpHandler:用于执行服务器端处理、返回非HTML数据或少量HTML标签,同时HTTP请求具有指定的扩展名的场景。比如:防盗链、图片水印
3)一般处理程序:用于执行服务器端处理、返回非HTML数据或少量HTML标签,同时HTTP请求不需要具有指定的扩展名的场景。:比如:生成验证码
2、自定义HttpHandler的步骤:
1)定义一个类,实现IHttpHandler接口
2)在ProcessRequest()方法中实现服务器端处理,并向客户端响应数据
3)IsReusable属性返回true,响应返回后HttpHandler对象不会被销毁。反之会被销毁(与Page对象的生命周期相同)
4)配置web.config:
<system.webServer>
<handlers>
<add name="testHandler" verb="*" path="*.do" type="WebApp_Demo2.Handlers.TestHttpHandler"/>
</handlers>
</system.webServer>
3、各级配置文件之间的优先级基于就近原则。
1)顶级配置文件:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config"