ASP.NET 配置文件是基于 XML 的文本文件(每个都命名为 web.config),可出现在 ASP.NET Web 应用程序服务器上的任何目录中。 每个 web.config 文件将配置设置应用到它所在的目录和它下面的所有虚拟子目录。子目录中的设置可随意重写或修改在父目录中指定的设置。根配置文件——WinNT/Microsoft.NET/Framework/<version>/config/machine.config,提供整台计算机的默认配置设置。ASP.NET 配置 IIS 阻止对 web.config 文件进行直接的浏览器访问,以确保这些文件的值不能成为公共的(试图访问这些文件将导致 ASP.NET 返回 403 : Access Forbidden)。
运行时,ASP.NET 使用这些 web.config 配置文件,针对传入的每个 URL 目标请求分层计算唯一的设置集合(这些设置只计算一次,然后在后面的请求间被缓存起来;ASP.NET 自动监视文件更改,如果有任何配置文件发生更改时则使缓存无效)。
例如,通过按下列顺序应用 web.config 文件设置,对 URL http://myserver/myapplication/mydir/page.aspx 的配置设置进行计算:
Base configuration settings for machine.
C:/WinNT/Microsoft.NET/Framework/v.1.00/config/machine.config
Overridden by the configuration settings for the site (or the root application).
C:/inetpub/wwwroot/web.config
Overridden by application configuration settings.
D:/MyApplication/web.config
Overridden by subdirectory configuration settings.
D:/MyApplication/MyDir/web.config
如果 web.config 文件位于某个站点(如“Inetpub/wwwroot”)的根目录下,其配置设置将应用于该站点的所有应用程序。注意,给定目录或应用程序根中 web.config 文件的存在是完全可选的。如果 web.config 文件不存在,该目录的所有配置设置将自动从父目录继承。
配置节处理程序和节
web.config 文件是基于 XML 的文本文件,它可以包含标准的 XML 文档元素(包括格式正确的标记、注释、文本、cdata 等等)。该文件的编码格式可以为 ANSI、UTF-8 或 Unicode;系统自动检测编码。 web.config 文件的根元素总是 <configuration> 标记。ASP.NET 和最终用户设置因此封装在该标记中,如下所示:
<configuration>
<!- Configuration settings would go here. -->
</configuration>
<configuration> 标记通常包含三种不同类型的元素,1) 配置节处理程序声明,2) 配置节组,3) 配置节设置。
配置节处理程序——ASP.NET 配置结构在 web.config 文件中的文件格式或支持的设置方面不进行任何假设。相反,它将处理 web.config 数据的任务委托给配置节处理程序,即实现 IConfigurationSectionHandler 接口的 .NET 框架类。单个 IConfigurationSectionHandler 声明只需要出现一次,通常是在 machine.config 文件中。子目录中的 web.config 文件自动继承此声明。配置节处理程序通过使用嵌套在 <configSections> 标记中的节标记指令在 web.config 文件中声明。节标记可进一步由节组标记限定,将它们组织为逻辑组(参见下文)。每个节标记标识一个表示特定配置数据节的标记名和一个处理该节的关联 IConfigurationSectionHandler 类。
配置节组——ASP.NET 配置允许出于组织目的对节进行分层分组。<sectionGroup> 标记可显示在 <configSections> 标记的内部或其他 <sectionGroup> 标记的内部。例如,ASP.NET 节处理程序全都显示在 <system.web> 节组中。
配置节——ASP.NET 配置设置在配置标记节中表示,同时嵌套在 <configuration> 标记(和可选的节组标记)中。对于每个配置节,必须在 config 层次结构中定义适当的节处理程序。例如,在下面的示例中,标记 <httpModules> 是定义 HTTP 模块配置数据的配置节。System.Configuration.HttpModulesConfigurationHandler 类负责在运行时解释 <httpModules> 标记中包含的内容。注意,节处理程序定义和节必须具有相同的节组限定符(此处为 <system.web>)。还应注意,标记名区分大小写,必须按所显示的原样键入。ASP.NET 的各种属性和设置也区分大小写,并且配置运行时不检查大小写是否不匹配。
<configuration>
<configSections>
<sectionGroup name="system.web">
<section
name="httpModules"
type="System.Web.Configuration.HttpModulesConfigurationHandler,System.Web"
/>
</sectionGroup>
</configSections>
<system.web>
<httpModules>
<add
name="CookielessSession"
type="System.Web.SessionState.CookielessSessionModule,System.Web"
/>
<add
name="OutputCache"
type="System.Web.Caching.OutputCacheModule,System.Web"
/>
<add
name="Session"
type="System.Web.SessionState.SessionStateModule,System.Web"
/>
<add
name="WindowsAuthen
tication"
type="System.Web.Security.WindowsAuthen
ticationModule,System.Web"
/>
<add
name="FormsAuthen
tication"
type="System.Web.Security.FormsAuthen
ticationModule,System.Web"
/>
<add
name="PassportAuthen
tication"
type="System.Web.Security.PassportAuthen
ticationModule,System.Web"
/>
<add
name="UrlAuthorization"
type="System.Web.Security.UrlAuthorizationModule,System.Web"
/>
<add
name="FileAuthorization"
type="System.Web.Security.FileAuthorizationModule,System.Web"
/>
</httpModules>
</system.web>
</configuration>
使用位置和路径
默认情况下,在顶级 <configuration> 标记中定义的所有配置设置都应用到包含 web.config 文件的当前目录位置以及该位置下的所有子路径。还可通过使用具有适当的约束 path 属性的 <location> 标记,将配置设置应用到当前配置文件下的特定子路径。如果配置文件是主 machine.config 文件,则可以将设置应用到特定的虚拟目录或应用程序。如果配置文件是 web.config 文件,则可将设置应用到特定的文件、子目录、虚拟目录或应用程序。
<configuration>
<location path="EnglishPages">
<system.web>
<globalization
requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1"
/>
</system.web>
</location>
<location path="EnglishPages/OneJapanesePage.aspx">
<system.web>
<globalization
requestEncoding="Shift-JIS"
responseEncoding="Shift-JIS"
/>
</system.web>
</location>
</configuration>
锁定配置设置
除了使用 <location> 标记指定路径信息外,还可以指定安全性以使配置层次结构中的其他深层配置文件无法重写该设置。若要锁定一组设置,可以在周围的 <location> 标记上指定 allowOverride 属性并将其设置为假。以下代码锁定两个不同应用程序的模拟设置。
<configuration>
<location path="app1" allowOverride="false">
<system.web>
<identity impersonate="false" userName="app1" password="app1pw" />
</system.web>
</location>
<location path="app2" allowOverride="false">
<system.web>
<identity impersonate="false" userName="app2" password="app2pw" />
</system.web>
</location>
</configuration>
注意,如果用户试图在其他配置文件中重写这些设置,配置系统将引发错误:
<configuration>
<system.web>
<identity userName="developer" password="loginpw" />
</system.web>
</configuration>