zoukankan      html  css  js  c++  java
  • 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(程序集名称)

  • 相关阅读:
    UML简介
    Servlet过滤器基础及使用场景
    eclipse maven配置问题:org.apache.maven.archiver.mavenarchiver.getmanifest
    maven中的groupId和artifactId 区分
    Spring中的控制反转和依赖注入
    SQL语句、PL/SQL块和SQL*Plus命令之间的区别
    Mybatis核心类生命周期和管理
    MyBatis Generator 下划线转驼峰命名
    修改maven默认仓库(即repository)的路径
    MyBatis SqlSessionFactory的几种常见创建方式
  • 原文地址:https://www.cnblogs.com/llcdbk/p/5221035.html
Copyright © 2011-2022 走看看