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 |举报 |字号 订阅 如果多 ...
随机推荐
- Docker 入门(Mac环境)- part 4 swarms
part-4 Swarms 简介 这一节主要是介绍一下如何在集群模式下部署docker应用:集群的概念很好理解了,多台机器共同完成一项任务:和Hadoop那些集群一样,docker也相当于有一个管理机 ...
- hive入门
hive 当前用到的就这些,以后用到的再补充. 参考自官方文档 大小写不敏感 创建/删除数据库 CREATE/DROP DATABASE|SCHEMA [IF NOT EXISTS] <data ...
- pymongo 使用测试
>>> import pymongo >>> uri = "mongodb://recall:123456@oceanic.mongohq.com:100 ...
- linux查看进程与线程数
1. 查看进程:ps -ef 或 ps -aux 得到进程的pid:如: ps -ef | grep process_name | grep -v "grep" | awk '{p ...
- jquery复选框 选中事件 及其判断是否被选中_常用笔记
checkbox的change事件可监听是否选中状态,也可添加onclick事件. var dom=$('.checkbox'); 1. 判断checkbox是否被选中 var dom=$('.che ...
- 未能加载文件或程序集”xxxx”或它的某一个依赖项,试图加载格式不正确的程序。
通常是因为应用程序编译的目标平台与引用的DLL类库目标平台不一致造成的,如应用程序目标编译为64位,而引用了32位的DLL. 在Visual Studio修改应用程序目标编译平台即可. 更多关于目标编 ...
- CSS一个元素同时使用多个类选择器(class selector)
CSS类选择器参考手册 一个元素同时使用多个类选择器 CSS中类选择器用点号表示.实际项目中一个div元素为了能被多个样式表匹配到(样式复用),通常div的class中由好几段组成,如<div ...
- python 调用 shell 命令
记录 python 调用 shell 命令的方法 加载 os 模块, 使用 os 类 import os; os.system("ls /");
- [译]Godot系列教程六 - 简单的二维游戏
Pong Godot自带的Demo中有大量更复杂的示例,但这款叫"Pong"的游戏可以对2D游戏的基本特性做一个介绍. 静态资源 本文所用到的一些资源文件:http://files ...
- opencv中图像伪彩色处理(C++ / Python)
使用OpenCV的预定义的颜色映射来将灰度图像伪彩色化. 1. colormap(色度图)是什么? 假设我们想在地图上显示美国不同地区的温度.我们可以把美国地图上的温度数据叠加为灰度图像——较暗的区域 ...