zoukankan      html  css  js  c++  java
  • 自定义HttpModule的一些经验--配置篇

    http://www.cnblogs.com/MyaSky/articles/2134954.html

    自定义HttpModule的一些经验--配置篇

    自定义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个呢。

    )

  • 相关阅读:
    【深度学习系列1】 深度学习在腾讯的平台化和应用实践
    js复制button在ie下的解决方式
    兔子--Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK
    UART串口协议基础1
    高校站点群建设方案简单介绍
    oracle10G之前介质下载地址【珍藏版】
    程序猿打新总结 6月份 新股申购秘籍
    斯坦福IOS开发第五课(第一部分)
    O2O领域添新军,正品网加快布局的战略考量
    如风一样,飞翔------Day37
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/5980633.html
Copyright © 2011-2022 走看看