ASP.NET 配置方案
更新:2007 年 11 月
当服务器接收对特定 Web 资源的请求时,ASP.NET 使用位于所请求 URL 的虚拟目录路径中的所有配置文件,按层次结构计算该资源的配置设置。大多数本地配置设置将重写父配置文件中的设置。
配置方案 1
例如,您可以有具有以下物理文件结构的网站,其中 Application Root 目录是应用程序虚拟目录。
通常,最后一个配置设置将覆盖在父目录中提供的同一节的设置。对于集合元素,将不重写这些设置,并将它们添加到集合中。
说明: |
---|
自定义的节处理程序可以实现另一个继承方案。 |
假定在 SubDir1 目录中有一个 Web.config 文件,而在 Application Root 或 SubDir2 目录中没有。在这种情况下,ASP.NET 使用三个配置文件来计算 SubDir1 目录的配置设置。级别最高的文件是位于 %systemroot%\Microsoft .NET \Framework\versionNumber\CONFIG 目录中的文件。此文件的名称为 Machine.config,它位于计算机级别。所有运行 .NET Framework 指定版本 (versionNumber) 的 .NET Framework 应用程序都从此文件继承设置。次高级别的文件是位于同一个位置的根 Web.config 文件。所有运行指定版本的 .NET Framework 的 ASP.NET 应用程序都继承它的设置。第三个配置文件是位于 SubDir1 目录中的 Web.config 文件。
假定 SubDir1 目录中的 Web.config 文件包含 enabled 属性设置为 true 的 anonymousIdentification 元素。enabled 属性的默认设置为 false。这是内部默认设置,而且不在任何根配置文件中指定。由于 Application Root 或 SubDir2 目录中没有可修改 anonymousIdentification 元素的配置文件,因此匿名用户无法访问这些目录中的 ASP.NET 资源。但是,匿名用户确实能够访问 SubDir1 目录中的 ASP.NET 资源。
安全说明: |
---|
ASP.NET 配置系统仅适用于 ASP.NET 资源,这些资源是在注册后由 ASP.NET 通过使用 Aspnet_isapi.dll 来处理的资源。默认情况下,配置系统不为非 ASP.NET 资源提供授权。例如,所有用户都可以访问 ASP、HTML、TXT、GIF 和 JPEG 文件。在上面的示例中,如果启用了目录浏览功能并且不存在其他限制,则所有用户都可以查看位于应用程序根目录 SubDir1 和 SubDir2 中的非 ASP.NET 文件。有关 ASP.NET 安全性的更多信息,请参见 ASP.NET Web 应用程序安全性。 |
配置方案 2
下面的网站有一个文件结构,在该结构中,应用程序虚拟目录映射到应用程序根目录 (MyAppRootDir)。
MyAppRootDir
SubDir1
SubDir1A
SubDir2
除非是在 ASP.NET 配置文件层次结构和继承中“有关 ASP.NET 继承的限制”一节中所描述的条件下,否则任何目录中的配置设置都将重写父目录中的设置。例如,可以通过完成下列步骤对应用程序设置进行配置,以便授予所有用户对 MyAppRootDir 和 SubDir2 中 ASP.NET 资源的访问权限,但是仅授予选定用户对 SubDir1 和 SubDir1A 中 ASP.NET 资源的访问权限:
将 MyAppRootDir 保持原样。MyAppRootDir 中的 ASP.NET 资源从 Machine.config 文件继承默认设置,其中的某个设置允许进行匿名访问。在此阶段,MyAppRootDir 及其三个子目录继承此身份验证设置。
将 Web.config 文件放在 SubDir1 中,并将身份验证功能设置为仅允许选定用户访问 SubDir1。这将重写 Machine.config 文件中的设置所允许的匿名访问权限,并且将向下继承到 SubDir1A。SubDir2(与 SubDir1 位于同一级别)不继承 SubDir1 中的身份验证设置。
所有的 ASP.NET 应用程序都继承位于根网站级别的 Web.config 文件中的默认设置。该文件安全配置节的默认设置允许所有用户访问所有 URL 资源。示例的 Application Root 中没有修改安全性的配置文件,因此所有用户都可以访问其中的 ASP.NET 资源(因为该目录从计算机级别的配置文件继承)。如果 SubDir1 目录中的 Web.config 文件包含一个安全配置节,该节仅授予某些用户访问权限,则 SubDir1A 继承该设置。因此,所有用户都可以访问应用程序根目录和 SubDir2 中的 ASP.NET 资源,但只有选定用户可以访问 SubDir1 和 SubDir1A 中的 ASP.NET 资源。
配置方案 3
虚拟目录是目录的友好名称,可以简化访问路径并隐藏实际目录的名称。虚拟目录的配置设置与物理目录结构无关。因此,必须仔细组织虚拟目录,以免出现配置问题。例如,可以设置虚拟目录,以便从下面的物理目录结构检索名为 MyResource.aspx 的 ASP.NET 页。
MyDir
SubDir1 (mapped from VDir1)
SubDir1A (mapped from VDir1A)
MyResource.aspx
SubDir2
在此示例中,SubDir1 中有一个 Web.config 文件,SubDir1A 中有另一个 Web.config 文件。如果客户端使用 URL https://localhost/vdir1/subdir1A/MyResource.aspx 访问 C:\Subdir1\Subdir1A\MyResource.aspx,则资源从 Vdir1 继承配置设置。但是,如果客户端使用 URL https://localhost/vdir1A/MyResource.aspx 访问相同的资源,则它不从 Vdir1 继承设置。因此,建议不要按此方式创建虚拟目录,因为这可能导致意外的结果,甚至会导致应用程序失败。
Internet 信息服务 (IIS) 是通过网站发布的所有资源的 Web 服务器。ASP.NET 配置系统仅适用于 ASP.NET 资源,这些资源是在注册后由 ASP.NET 通过使用 Aspnet_isapi.dll 来处理的资源。默认情况下,配置系统不为非 ASP.NET 资源提供安全性。例如,所有用户都可以访问 ASP、HTML、TXT、GIF 和 JPEG 文件。在上面的示例中,如果启用了目录浏览功能并且不存在其他限制,则所有用户都可以查看位于应用程序根目录 SubDir1 和 SubDir2 中的非 ASP.NET 文件。