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(程序集名称)

posted @ 2016-02-26 17:10  洛晨随风  阅读(217)  评论(0编辑  收藏  举报