- 什么是HttpModule
- HttpModule有什么作用
- 如何编写自己的HttpModule
- 如何注册HttpModule
- 案例解读:HttpModule在NopCommerce与Orchard中的应用
- 系统的HttpModule
什么是HttpModule
HTTP 模块是一个在每次针对应用程序发出请求时调用的程序集。
HttpModule有什么作用
ASP.NET 使用模块来实现各个应用程序功能,其中包括 Forms 身份验证、缓存、会话状态和客户端脚本服务
如何编写自己的HttpModule
自定义的HttpModule要实现IHttpModule接口的两个方法:Dispose,Init
public class CustomModule:IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
context.EndRequest += context_EndRequest;
}
void context_EndRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.Write(DateTime.Now+" begin request...");
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.Write(DateTime.Now + " end request...");
}
}
如何注册HttpModule
可以通过在 Web.config 文件中创建一个项来注册该模块。通过注册 HTTP 模块,可使其能够订阅请求管道通知。在 IIS 7.0 中,应用程序可以在经典模式或集成模式下运行。在经典模式下,请求的处理方式与在 IIS 6.0 中基本相同。在集成模式下,IIS 7.0 使用管道(管道使其可以与 ASP.NET 共享请求、模块和其他功能)来管理请求。
在 IIS 7.0 集成模式下注册模块的过程与 IIS 7.0 经典模式下的注册过程稍有不同。
为 IIS 6.0 和在经典模式下运行的 IIS 7.0 注册模块
<configuration> <system.web> <httpModules> <add name="CustomModule" type="MyDemo.CustomModule,MyDemo"/> </httpModules> </system.web> </configuration>
为在集成模式下运行的 IIS7.0 注册模块
<configuration> <system.webServer> <modules> <add name="CustomModule" type="MyDemo.CustomModule,MyDemo"/> </modules> </system.webServer> </configuration>
案例解读:HttpModule在NopCommerce与Orchard中的应用
1、在NopCommerce中创建了AutofacRequestLifetimeHttpModule,用来管理组件的生命周期,确保请求结束后注销组件。
参考:Where is AutofacRequestLifetimeHttpModule registered?
2、在Orchard中创建了WarmupHttpModule模块, 该模块检查host是否就绪,如果没有,就将request加入到等待队列中,host就绪后将继续执行request.
参考:源码阅读Orchard.WarmupStarter程序集
参考: