首页 > 代码库 > Web.config设置system.webServer

Web.config设置system.webServer

一般情况在iis部署web网站都非常顺利,但是遇到复杂环境,或者被配置过又正在使用的时候,就束手无策了,

因为对IIS和Web.config不熟悉,不知其中要害,导致浪费一天甚至更久的时间去处理一个可能是不起眼的配置问题

 

本文主要和大家共同探讨下Web.config的system.webServer节点配置,如有错误之处,劳烦指点下

环境:IIS 7.0及以上

一、总览

 

system.WebServer 是 configuration 节的子级。有关更多信息,请参见 IIS 7.0: system.webServer Section Group (IIS Settings Schema)(IIS 7.0:system.webServer 节组(IIS 设置架构))。

 

下面是可以在 system.WebServer 配置组中进行的 Web 服务器设置的示例:

  • 当请求未包含特定资源时,Web 服务器返回给客户端的默认文档(defaultDocument 元素)。

  • 响应的压缩设置(httpCompression 元素)。

  • 自定义标头(httpProtocol 节的 customHeaders 元素)。

  • 模块(modules 元素)。

  • 处理程序(handlers 元素)。

system.webServer 节中的某些设置只适用于 IIS 7.0 集成模式,而不适用于经典模式。具体而言,如果应用程序正在经典模式下运行,则会忽略 Web.config 文件的 system.WebServer节中指定的所有托管代码模块和处理程序。与 IIS 的早期版本相同,托管代码模块和处理程序必须在 system.web 节的 httpModules 和 httpHandlers 元素中定义。

本主题阐释需要修改 system.webServer 节的三个常见配置任务:

  • 添加默认文件,以便在请求 URL 未包含特定的文件时,提供该默认文件。

  • 注册托管代码模块。

  • 添加自定义响应标头。

二、配置默认文件

当请求 URL 未包含 Web 应用程序的特定文件时,IIS 7.0 将提供一个默认文件。

配置默认文件

1 如果应用程序没有 Web.config 文件,请使用 Visual Studio 或文本编辑器创建该文件。

2 如果 Web.config 文件尚未包含 system.webServer 节,请在 configuration 元素中创建该节,如下面的示例所示:

<configuration>  <system.webServer>  </system.webServer></configuration>

3 在 system.webServer 元素内,创建一个 defaultDocument 元素。


4 在 defaultDocument 元素内,创建一个 files 元素。


5 在 files 元素内创建一个 add 元素,并在 value 属性内指定默认文件的路径和名称。
下面的示例演示了一个 system.webServer 节,该节配置为提供 Products.aspx 文件作为默认文件。

 

<configuration>  <system.webServer>    <defaultDocument>      <files>        <add value="http://www.mamicode.com/Products.aspx" />      </files>    </defaultDocument>  </system.webServer></configuration>

 

 三、注册托管代码模块

 

每次请求时都会调用托管代码模块,通过该模块可对请求或响应进行自定义。

配置自定义托管代码模块

  1. 如果应用程序没有 Web.config 文件,请使用 Visual Studio 或文本编辑器创建该文件。

  2. 如果 Web.config 文件尚未包含 system.webServer 节,请在 configuration 元素中创建该节,如下面的示例所示:

    <configuration>  <system.webServer>  </system.webServer></configuration>
  3.  system.webServer 元素内,创建一个 modules 元素。

  4.  modules 元素内创建一个 add 元素,并在 name 和 type 属性中指定自定义模块。

    实际的名称和类型取决于要添加的模块。下面的示例演示如何添加名为CustomModule的自定义模块,该模块将实现为类型Samples.CustomModule。

    <configuration>  <system.webServer>    <modules>      <add name="CustomModule" type="Samples.CustomModule" />    </modules>  </system.webServer></configuration>
  5. 向模块注册中添加 precondition 属性,并将其值设置为managedHandler。

    此前置条件会导致仅在请求 ASP.NET 应用程序资源(例如 .aspx 文件或托管处理程序)时才调用该模块。该资源中不包括静态文件(例如 .htm 文件)。

    其 configuration 节将类似于以下示例。

    <configuration>  <system.webServer>    <modules>      <add name="CustomModule" type="Samples.CustomModule"            precondition="managedHandler" />    </modules>    <defaultDocument>      <files>        <add value="http://www.mamicode.com/Products.aspx" />      </files>    </defaultDocument>  </system.webServer></configuration>

 三、配置自定义响应标头

利用自定义响应标头,可向浏览器发送应用程序特定的信息。例如,可以添加 Content-Language 标头来描述网页正文中使用的语言。若要执行此操作,请提供一个或多个语言和国家/地区值,例如 en-US(美国英语)或 en-GB(英国英语)。

配置自定义响应标头

  1. 如果应用程序没有 Web.config 文件,请使用 Visual Studio 或文本编辑器创建该文件。

  2. 如果 Web.config 文件尚未包含 system.webServer 节,请在 configuration 元素中创建该节,如下面的示例所示:

    <configuration>  <system.webServer>  </system.webServer></configuration>
  3.  system.webServer 元素内,创建一个 httpProtocol 元素。

  4.  httpProtocol 元素内,创建一个 customHeaders 元素。

  5.  customHeaders 元素内创建一个 add 标记,并在 name 和 value 属性中指定自定义标头。

    实际的名称和类型将取决于该标头在应用程序中的功能。下面的示例演示如何添加名为CustomHeader且值为CustomHeader的自定义标头。

    <configuration>  <system.webServer>    <httpProtocol>      <customHeaders>        <add name="CustomHeader" value="http://www.mamicode.com/CustomHeader" />      <customHeaders>    </httpProtocol>  </system.webServer></configuration>

 

Web.config设置system.webServer