httpmodule初识
.net的请求流程:
HttpRequest-->inetinfo.exe->ASPNET_ISAPI.DLL-->Http Pipeline-->ASPNET_WP.EXE-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()
inetinfo.exe:主要用于支持微软Windows IIS网络服务的除错。我的理解就是IIS调试错误就要用到的一个EXE
ASPNET_ISAPI.DLL:这个DLL是asp.net底层的一个类库
Http Pipeline:减少握手次数的管道
ASPNET_WP.EXE:这个是dotnet的服务端的托管程序,想要运行dotnet的程序,就必须有此进程
HttpRuntime:HTTP运行时
HttpApplication:HttpApplication 类的实例是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的。HttpApplication 类的一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。这样,成员变量才可用于存储针对每个请求的数据。
HttpModule:负责监听HttpRequest,同时对HttpRequest增添或者过滤掉一部分内容。也就是说,当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理
HttpPModule样例:
namespace DataGridView { public class HttpModule:IHttpModule { public void Dispose() { } public void Init(HttpApplication application) { application.BeginRequest += new EventHandler(Application_BeginRequest); application.EndRequest += new EventHandler(Application_EndRequest); } // 自己要针对一些事情进行处理的两个方法 private void Application_BeginRequest(object sender, EventArgs e) { HttpApplication application = sender as HttpApplication; HttpContext context = application.Context; HttpRequest request = application.Request; HttpResponse response = application.Response; response.Write("我来自自定义HttpModule中的BeginRequest<br />"); } private void Application_EndRequest(object sender, EventArgs e) { HttpApplication application = sender as HttpApplication; HttpContext context = application.Context; HttpRequest request = application.Request; HttpResponse response = application.Response; response.Write("我来自自定义HttpModule中的EndRequest<br />"); } } }
这里其中还有很多事件,不一一解释了
配置httpmodule:
写在system.web节点下
<system.web> <compilation debug="true" targetFramework="4.0" /> <httpModules> <add name="MyHttpModuleTest" type="DataGridView.HttpModule,DataGridView"></add> </httpModules> </system.web>
type内部的写法为:
namespace.httpmoduleName,assembly.dll(程序集名称)