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个呢。
)
system.web下的HttpModules节点和system.webServer下的modules节点的配置区别的更多相关文章
- 基类包括字段“ScriptManager1”,但其类型(System.Web.UI.ScriptManager)与控件(System.Web.UI.ScriptManager)的类型不兼容
首先说下原先的情况,就是原本老项目的Web解决方案是使用.net framework 2.0的老版本, 所以机器也安装过Microsoft ASP.NET 2.0 AJAX Extensions..A ...
- 未能加载文件或程序集“System.Web.Razor 2.0.0 or system.web.webpages.razor 2.0.0
出现这种问题,有两种情况: 一.bin目录下没有相应的dll,可以将相应dll拷贝至bin目录或者设置相关dll的属性“复制到本地”:true 二.如果是高于Visual Studio2013版本的开 ...
- Web.config的system.webServer节点与system.web的区别
Web.config 文件中的 system.webServer 节用于指定适用于 Web 应用程序的 IIS 7.0 设置.system.WebServer 是 configuration 节的子级 ...
- 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)
原文:返璞归真 asp.net mvc (2) - 路由(System.Web.Routing) [索引页] [源码下载] 返璞归真 asp.net mvc (2) - 路由(System.Web.R ...
- 深入System.Web.Caching命名空间 教你Hold住缓存管理
一,System .Web.Caching与缓存工作机制简介 System.Web.Caching是用来管理缓存的命名空间,其父级空间是System.Web,由此可见,缓存通常用于Web网站的开发,包 ...
- System.Web.Mvc 找到的程序集清单定义与程序集引用不匹配
System.IO.FileLoadException: 未能加载文件或程序集"System.Web.Mvc, Version=5.0.0.0, Culture=neutral, Publi ...
- VS2010 中,windows服务不能添加 System.Web 引用
今天在写windows服务的时候,右键添加引用->.NET中没有找到System.Web,在->Recent中找到System.Web,但添加完后却显示黄色叹号,最后百度一下解决了这个问题 ...
- asp.net mvc4 System.Web.Optimization找不到引用
在MVC4的开发中,如果创建的项目为空MVC项目,那么在App_Start目录下没有BundleConfig.cs项的内容,在手动添加时在整个库中都找不到:System.Web.Optimizatio ...
- Asp.Net 之 未能加载文件或程序集 system.web.extensions 解决方法
最近做项目发现未能加载文件或程序集的错误,这是由于我的机器上没有安装Ajax的原因.问题解决后,整理如下:表现:1."System.Web.Extensions, Version=1.0.61025. ...
- <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
Asp.net Mvc 未能加载类型“System.Web.Mvc.ViewPage 的解決方法 2010-11-30 17:31:51| 分类: .net mvc |举报 |字号 订阅 如果多 ...
随机推荐
- scp拷贝提示its a directory 错误
scp拷贝提示its a directory 错误 场景 使用scp的格式是 scp my_file user@ip:/home/directory 之前也一直这么用,没什么错误,莫名其妙 原因定位 ...
- JAVA开发的23种设计模式之 --- 桥接模式
桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构. 应用场景 实现系统可能有多 ...
- JAVA反射的使用之ResultSet的自动转换
Hello,大家好,上篇文章我们说了下反射的基本情况和简单使用,那么本篇文章我们就使用反射写一个工具类.用来将数据库查询结果的ResultSet转换为指定类型的对象.使用反射来实现ResultSet内 ...
- 比较正确的 iPhone7/7+ 的进入DFU的方法是这样的
正确的.没有歧义的.在WIndows7系统下进入DFU并刷机的方法是: 1)PC端打开iTunes,数据线连接iPhone7与PC: 2)iPhone7关机: 3)同时按下电源键和音量减键,LOGO会 ...
- OSX系统添加定时任务 Linux crontab命令 定时执行py 文件 任务
#输出日志 #将日志输入到2.log文件中无论错误还是正确02 15 * * * . ~/xad/pyenv/xadserver/bin/activate && cd /root/xa ...
- python dict与list
本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成.字典的键必须是不可改 ...
- Logistic回归分析简介
Logistic回归:实际上属于判别分析,因拥有很差的判别效率而不常用. 1. 应用范围: ① 适用于流行病学资料的危险因素分析 ② 实验室中药物的剂量-反应关系 ③ 临床试验 ...
- 这到底是什么bug?---已结贴
问题描述:全局变量,会被莫名其妙更改!打印为50,后面做比较的时候这个值为0了. 第一,我肯定没有犯低级错误,没有其他的更改,搜索全部代码,没有发现这个变量因为我程序问题导致不符合预期,同时找了两位同 ...
- mac上使用zsh配置环境变量
Mac配置环境变量的地方 一./etc/profile (建议不修改这个文件 ) 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. 二./etc/bashrc (一般在这个文件中添加系统级环境 ...
- windows 中 到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe windows/system32
到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe JavaWindowsCC++C# 当电脑里面有多个jdk或是jre时,在cmd里面到底是用的哪个 ...