• system.web下的HttpModules节点和system.webServer下的modules节点的配置区别


    自定义web模块,需继承System.Web.IHttpModule接口

    一:拦截对该服务器所有的http请求。

    第一步:将自定义module类使用强名编译,并放在GAC中。

    Windows7不能直接把dll文件拖到GAC中,只能只用GACUtil工具。

    方法是:打开Visual Studio命令行,提示进入目录:E:Program FilesMicrosoft Visual Studio 10.0VC,
    gacutil /i [assemblypath],将该Assembly安装在GAC中
    gacutil /l [assemblyName], 出现Assembly的详细信息

    gacutil /u [assemblyName], 卸载该Assembly



    第二步:把模块加在machine.config, web.config或者IIS的applicationhost.config里。
    IIS的applicationhost.config位于(%windir%system32inetsrvconfigapplicationhost.config)

    <location path="" overrideMode="Allow">
    <system.webServer>
    <modules>
        
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass,RequestModuleAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=5510eb446e44a3fd"/>
             ......................

    其中,type的格式为:“NameSpaceName.ClassName,AssemblyName, StrongName”



    二:只拦截对某web程序的Request,有两种方法:

    1.将自定义模块单独编译为一个dll文件,并通过dll引用添加到web程序。

    并修改该程序内部的web.config文件:

    <configuration>    
    <system.webServer> <!-- IIS7.0集成模式下 -->
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass,RequestModuleAssembly"/>
    </modules>
    </system.webServer>
    <system.web> <!-- IIS7.0经典模式或者IIS之前版本 -->
    <compilation debug="true" targetFramework="4.0"/>
    <httpModules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass,RequestModuleAssembly"/>
    </httpModules>
    </system.web>
    </configuration>



    2.把自定义模块的类文件放在web网站的app_code目录下,并修改该程序内部的web.config文件:

    <configuration>
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass"/>
    </modules>
    </system.webServer>
    <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpModules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass"/>
    </httpModules>
    </system.web>
    </configuration>

    其中,type格式为“NameSpaceName.ClassName“。

    奇怪的是,在第二种方式下,在VS debug模式下访问.wmv文件时不能触发module,访问.aspx文件时则可以。而第一种方式下,访问程序里的.wmv文件和.aspx文件都可以触发该自定义module。笔者不知为何,索性改回第一种方式。留待以后再探索。(探索结果:原来不是第二种方式的问题,而是在测试时网站端口改变,而旧的debug线程未被杀死,所有用旧的url直接访问了过期的旧线程。这是不是VS的一个bug,当退出debug时,启动的临时线程并未被杀死,而重新启动debug时,旧的临时server线程也未被新的替代,好大一个bug哇。看图:

    ,只有两个,壮观的时候有6,7个呢。

    )

     
     
     
  • 相关阅读:
    软件工程的实践项目的自我目标
    transform使用导致元素内字体出现模糊的坑~~~
    nvmw安装,用于控制node版本;
    开章大吉~
    eclipse运行Android项目出现“The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse. ”
    Date对象相关函数使用
    Balsamiq Mockups 注册码
    如何关闭sublime更新提示
    如何在边框中加入文字
    如何用手机测试移动端页面
  • 原文地址:https://www.cnblogs.com/xdot/p/7714610.html
Copyright © 2020-2023  润新知