Web.config 是可以配置在网站的任何一个目录下的,但是Web.config中一些配置项只能配置在某些特定目录下,这些配置项如果不是配置在某些特定目录下的时候,会报错,或者不起作用。
这些特殊的配置项,大多是做应用程序级别配置的配置项
比如:
整个应用的验证模式配置项,如果你把它放在一个应用级别目录的下级目录时候。会报错。
又比如,新加一个 HttpModule ,如果你把它放在一个应用级别目录的下级目录时候,会不起作用。
但是,卸载一个 HttpModule 的配置,把它放在一个应用级别目录的下级目录时候,却起作用。
下面我们看一个对这个功能的测试
我们有这样一个站点,如下图:
其中 MyWeb200 是一个站点
WebApp01 和 WebApp04 都是一个虚拟目录(Virtual Directory)
虚拟目录 可以设置在跟根站点不在同一个目录下。
他们的不同之处在于WebApp04 这个虚拟目录被设置了应用程序级别,WebApp01 没被设置,则这个目录下的
应用程序级别是整个根站点下。
可以明显看到 WebApp04 下有 bin 目录, WebApp01 下没有
WebApp02 和 WebApp03 都是站点下的一个子目录,他们的目录跟根站点的目录有从属关系。
不同之于在于 WebApp02 设置了应用程序级别
WebApp03 没被设置。
如果我们在上述所有目录下,都增加了一个 HttpModule,起作用的只有以下几个目录的配置,其他目录下不起作用。
根站点 Web.config 中新设一个 HttpModule 起作用
WebApp01 虚拟目录下 Web.config 中新设一个 HttpModule 起作用
WebApp02 子目录下 Web.config 中新设一个 HttpModule 起作用
WebApp021 子目录下 Web.config 中新设一个 HttpModule 起作用
其他站点下 Web.config 中新设 HttpModule 不起作用,但是任何目录下,卸载一个指定的 HttpModule 起作用。
我上面用到的几个词的英文翻译:
虚拟目录 (Virtual Directory)
子目录 (subdirectory)
应用级别目录(application level)
参考:
http://www.microsoft.com/communities/newsgroups/en-us/default.aspx
?dg=microsoft.public.dotnet.framework.aspnet&tid=3053b1b3-5edb-4716-99bc-cb476a61cf35&p=1
一个简单的HttpModule例子
http://www.cinenn.com/blog/105.shtml
总结:
只有一句话。
新增一个 HttpModule 只能是应用程序级别的设置,卸载一个 HttpModule 是目录层次的设置。