HTTP模块是一个在每次针对应用程序发出请求时调用的程序集。
HTTP模块的典型用法:
(1)安全性 因为您可以检查传入的请求,所以HTTP模块可以在请求页,XML Web Services或调用处理程序之前执行自定义的身份验证或其他安全检查。
(2)统计信息和日志记录。因为HTTP模块是在每次请求时调用,所以,您可以将请求统计信息和日志记录信息收集到一个集中的模块中,而不是收集到各页中。
(3)自定义页眉页脚。因为你可以修改出站响应,所以可以在每一个页面或XML Web Services响应中注入内容,如自定义标头信息。
如何使用HTTP模块:
(1)写一个实现IHttpModule接口的模块,需要实现Init(HttpApplication context),Dispose()方法。
(1-1)Init(HttpApplication context)方法
该方法接受一个HttpApplication对象,代表了当前的应用程序。我们可以在这个方法中订阅HttpApplication对象的事件。
过程可以理解如下:
1.当站点的某个资源被第一次访问时,Asp.Net会创建HttpApplication类的实例,他代表着站点程序,同时还创建在Web.config中注册的HttpModule的实例。
2.在创建HttpModule的实例时,将调用Init()方法。
3.在Init方法内,订阅HttpApplication的各种事件
4.HttpApplication在其生命周期中将触发这些事件,触发事件时将掉用我们订阅的事件处理方法。
(1-2)Dispose()方法中销毁所占资源。
(2)在应用程序的Web.config文件中注册自定义模块。
当ASP.Net创建表示您的应用程序的HttpApplication类的实例时,将创建已注册的任何模块的实例,当然也包括默认的模块。在创建模块时,将调用它的Init方法,并自行初始化。
当然你也可以删除掉默认的处理HTTP模块。如Forms身份验证等。
如下:
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="AuthenticationModule" type="JJSoft.Web.HttpModule.HttpModuleAuthentication"/>
增加了一个自定义的身份认证模块。
<remove name="WindowsAuthentication"/>
删除了windows身份认证模块,如果你不删除该模块,将默认使用该模块进行身份认证。
</httpModules>
付:内置的 Http Module
<httpModules>
(1)页面级输出缓存
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/>
(2)Sessions状态管理
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
(3)用集成Windows身份验证进行客户端验证
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>
(4)用基于Cookie的窗体身份验证进行客户端验证
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>
(5)用MS护照进行客户端验证
<add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>
(6)管理当前用户角色
<add name="RoleManager" type="System.Web.Security.RoleManagerModule"/>
(7)判断用户是否被授权访问某一URL
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/>
(8)判断用户是否被授权访问某一文件
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/>
(9)管理Asp.Net的匿名访问
<add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule"/>
(10)管理用户档案文件的创立及事件
<add name="Profile" type="System.Web.Profile.ProfileModule"/>
(11)捕捉异常,格式化错误提示字符,传递给客户端程序
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</httpModules>
ASP.Net在缺省配置文件中注册了这些HttpModule
ASP.NET会根据以下顺序来决定最终的配置情况:
1../Microsoft.NET/Framework/v.1.00/web.config(缺省配置文件)
2../webapp/web.config (应用的配置)
3../webapp/owndir/web.config (自己的配置)