在 ASP.NET 中,已经预定义了许多HttpModule,甚至已经在服务器的网站配置文件中进行了注册,在系统文件夹 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 中,web.config 文件中已经注册了 14 个 HttpModule。
- <httpModules>
- <add name="OutputCache"
- type="System.Web.Caching.OutputCacheModule" />
- <add name="Session"
- type="System.Web.SessionState.SessionStateModule" />
- <add name="WindowsAuthentication"
- type="System.Web.Security.WindowsAuthenticationModule" />
- <add name="FormsAuthentication"
- type="System.Web.Security.FormsAuthenticationModule" />
- <add name="PassportAuthentication"
- type="System.Web.Security.PassportAuthenticationModule" />
- <add name="RoleManager"
- type="System.Web.Security.RoleManagerModule" />
- <add name="UrlAuthorization"
- type="System.Web.Security.UrlAuthorizationModule" />
- <add name="FileAuthorization"
- type="System.Web.Security.FileAuthorizationModule" />
- <add name="AnonymousIdentification"
- type="System.Web.Security.AnonymousIdentificationModule" />
- <add name="Profile"
- type="System.Web.Profile.ProfileModule" />
- <add name="ErrorHandlerModule"
- type="System.Web.Mobile.ErrorHandlerModule,
System.Web.Mobile, Version=4.0.0.0, - Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- <add name="ServiceModel"
- type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.
- Activation,Version=4.0.0.0, Culture=neutral,
- PublicKeyToken=31bf3856ad364e35" />
- <add name="UrlRoutingModule-4.0"
- type="System.Web.Routing.UrlRoutingModule" />
- <add name="ScriptModule-4.0"
- type="System.Web.Handlers.ScriptModule, System.Web.
Extensions, Version=4.0.0.0, - Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
- </httpModules>
主要的HttpModule的解释如下:
OutputCacheMudole 完成ASP.NET的输出缓存管理工作。
OutputCacheMudole的配置参数通过system.web配置元素的caching子元素的 outputCache元素进行定义。当启用输出缓存之后,OutputCacheMudole 将注册 HttpApplication 的ResolveRequestCache 和 UpdateRequestCache 两个事件完成输出缓存的管理。
SessionStateModule 完成 Session 的管理工作。
这个 Module 的配置参数通过配置文件中的 system.web 配置元素的 sessionState 子元素进行配置。当启用 Session 状态管理之后,SessionStateModule 将注册 HttpApplication 的AcquireRequestState、ReleaseRequestState、EndRequest三个事件完成 Session 状态的管理工作。
ProfileModule 在 .NET 2.0 之后,提供个性化数据管理。
这是一个自定义的类似于 Session 的会话状态管理,但是,个性化数据的读取和保存可以由程序员完全控制,并且提供了强类型的数据访问方式。这个 Module 的配置参数在 system.web 的子元素 profile 中进行说明。当启用了个性化数据管理之后,Module 将注册 HttpApplicaiton 的 AcquireRequestState 和EndRequest 事件处理。
AnonymousIdentificationModule 提供匿名用户的标识。
是否启用匿名用户标识在配置文件的system.web配置元素的子元素 anonymousIdentification 中定义,还可以配置匿名标识的管理方式。由于在 AuthenticateRequest 事件中将验证用户,获取用户名,所以,这个 Module 注册了 PostAuthenticateRequest 的事件处理,当用户没有经过验证的时候,为用户分配一个唯一的匿名标识。
WindowsAuthenticationModule、FormsAuthenticationModule和PassportAuthenticationModule用来完成用户的验证工作。
它们通过配置文件中 system.web 的子元素 authentication 子元素定义,mode 属性用来指定网站当前使用的验证方式,也就是哪一个 Module 将被用来完成验证工作。在启用验证的情况下,FormsAuthenticationModule 和 PassportAuthenticationModule将注册 HttpApplication 的AuthenticateRequest 和 EndRequest 事件进行用户的验证处理。 WindowsAuthenticationModule 将注册 AuthenticateRequest 的事件处理。
RoleManagerModule、UrlAuthorizationModule、FileAuthorizationModule 用来完成用户的授权管理。
授权管理的配置参数来自 system.web 的 authorization 子元素。UrlAuthorizationModule 和 FileAuthorizationModule 注册了 HttpApplication 的 AuthorizeRequest 事件处理,用来检查 Url 和 文件的访问授权。RoleManagerModule 在 Url 和 文件访问授权检查通过之后,通过用户的标识和角色来完成用户的授权检查,RoleManagerModule 注册了 HttpApplication 的 PostAuthenticateRequest 和 EndRequest 事件处理。
对一个网站来说,ASP.NET提供的有些HttpMoudle可能并不是需要的, 然而,如果你不去手工禁用它们,它们其实会一直运行。 比如 我 会禁用下面这些HttpMoudle: <httpModules> <remove name="Session"/> <remove name="RoleManager"/> <remove name="PassportAuthentication"/> <remove name="Profile"/> <remove name="ServiceModel"/> </httpModules> 对于使用Forms身份认证的网站的来说,下面这些HttpModule也是可以禁用的: <httpModules> <remove name="WindowsAuthentication"/> <remove name="FileAuthorization"/> </httpModules>