HttpModule的移除

来源:百度文库 编辑:神马文学网 时间:2024/07/08 10:47:11
HttpModule的移除
HttpModule 是个好东西,很多程序都有用到,例如DotText、Asp.Net Forums等,但是有一个问题,当我们将使用了HttpModule 的程序设置为站点根目录(以将DotText设置为站点目录为例),然后再在根目录下建虚拟目录,运行虚拟目录里的asp.net程序会提示出错:
分析器错误信息: 找不到文件或程序集名称“Dottext.Web”,或找不到它的一个依赖项。
源错误:
行 145:
行 146:
行 147:    
行 148:

行 149:
也就是说对于虚拟目录中的asp.net应用程序,会首先去加载其所在站点中的HttpModule,而一般虚拟目录中的bin目录是不会有HttpModule所在的DLL的,所以就会出如上的错误。
注意,其中的错误提示信息(找不到文件或程序集名称“Dottext.Web”,或找不到它的一个依赖项。)很有误导性,一开始让我以为是需要每个虚拟目录拷贝一个Dottext.Web.dll进去呢,但是将dll拷贝过去后,其HttpModule会对虚拟目录中的asp.net应用程序产生影响,因此这个问题曾让我郁闷了很久。
后来偶然查msdn中,发现web.config里面的HttpModule是有三种子节点的:





子标记 说明
将 HttpModule 类添加到应用程序。 请注意,如果以前已指定了相同的谓词/路径组合(例如在父目录的 Web.config 文件中),则对 的第二个调用将重写以前的设置。
从应用程序移除 HttpModule 类。
从应用程序移除所有 HttpModule 映射。
唉,其实看到add也应该想到remove的,在虚拟目录中的web.config中Remove一下不需要的HttpModule,发现果然没有问题了!如:



注意一般表用,因为用会把machine.config中定义的httpModule一起清除了从而导致asp.net程序不能正常运行。
有一点我很疑惑的是既然都是用remove移除这个HttpModule了,为什么还需要将该HttpModule对应的dll拷贝到虚拟目录的dll下。
httpHandlers的处理方法也类似。