system.web下的HttpModules節點和system.webServer下的modules節點的配置區別


自定義web模塊,需繼承System.Web.IHttpModule接口

一:攔截對該服務器所有的http請求。

第一步:將自定義module類使用強名編譯,並放在GAC中。

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

方法是:打開Visual Studio命令行,提示進入目錄:E:\Program Files\Microsoft Visual Studio 10.0\VC,
gacutil /i [assemblypath],將該Assembly安裝在GAC中
gacutil /l [assemblyName], 出現Assembly的詳細信息

gacutil /u [assemblyName], 卸載該Assembly



第二步:把模塊加在machine.config, web.config或者IIS的applicationhost.config里。
IIS的applicationhost.config位於(%windir%\system32\inetsrv\config\applicationhost.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個呢。

)

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM