<httpListener> 元素(网络设置)

自定义 HttpListener 类使用的参数。

<httpListener
  unescapeRequestUrl ="true|false"
/>

特性和元素

以下几节描述了属性、子元素和父元素。

特性

特性

说明

unescapeRequestUrl

一个布尔值,该值指示 HttpListener 实例是否使用未经转义的原始 URI,而非经过转换的 URI。

子元素

无。

父元素

元素

说明

<设置>

配置 System.Net 命名空间的基本网络选项。

备注

unescapeRequestUrl 特性指示是否 HttpListener 使用原始未转义 URI 而不是转换后的 URI,其中任何百分比编码的值都被转换,需要执行其他规范化步骤。

HttpListener 实例通过 http.sys 服务接收请求时,它会创建 http.sys 所提供的 URI 字符串的实例,并将其公开为 HttpListenerRequest.Url 属性。

http.sys 服务公开两个请求 URI 字符串:

  • 原始 URI

  • 已转换的 URI

原始 URI 是 HTTP 请求的请求行中提供的 System.Uri

GET /path/

Host: www.contoso.com

http.sys 为上述请求提供的原始 URI 是 "/path/"。 这表示通过网络发送 HTTP 谓词时后面所跟的字符串。

http.sys 服务从请求中提供的信息创建转换的 URI,方法是使用 HTTP 请求行和主机标题中提供的 URI 以确定请求应提交至的原服务器。 这是通过将来自请求的信息与一组已注册的 URI 前缀进行比较来实现的。 HTTP 服务器 SDK 文档涉及该转换的 URI,形式为 HTTP_COOKED_URL 结构。

为了能够将该请求与已注册 URI 前缀进行比较,需要对该请求进行一些正常化。 对于以上示例,转换的 URI 将如下所示:

https://www.contoso.com/path/

http.sys 服务结合了 Uri.Host 属性值以及请求行中的字符串以创建转换的 URI。 此外,http.sys 和 System.Uri 类也会执行以下操作:

  • 取消转义所有百分比编码的值。

  • 将百分比编码的非 ASCII 字符转换为 UTF-16 字符表示形式。 请注意,UTF-8字符、ANSI/DBCS 字符和 Unicode 字符(使用 %uXXXX 格式的 Unicode 编码)都受支持。

  • 执行其他规范化步骤,如路径压缩。

由于请求不包含任何有关用于百分比编码值的编码信息,因此可能无法只是通过分析百分比编码值确定正确的编码。

因此,http.sys 可提供用于修改进程的两个注册表项:

注册表项

默认值

说明

EnableNonUTF8

1

如果为零,则 http.sys 仅接受 UTF-8 编码的 URL。

如果非零,则 http.sys 也接受请求中的 ANSI 编码或 DBCS 编码的 URL。

FavorUTF8

1

如果非零,则 http.sys 始终首先尝试将 URL 解码为 UTF-8;如果该转换将失败,并且 EnableNonUTF8 为非零,Http.sys 则尝试将其解码为 ANSI 或 DBCS。

如果为零(且 EnableNonUTF8 为非零值),则 http.sys 尝试将其解码为 ANSI 或 DBCS;如果不成功,它将尝试 UTF-8 转换。

HttpListener 接收到请求时,它将使用从 http.sys 转换而来的 URI 作为 Url 属性的输入。

除了 URI 中的字符和数字以外,还需要支持其他字符和数字。 例如,下面的 URI 用于检索客户的客户信息数字 "1/3812":

https://www.contoso.com/Customer('1%2F3812')/

请注意 Uri (%2F) 中以百分比编码的斜杠。 这是必要的,因为在这种情况下斜杠字符表示数据而不是路径分隔符。

将字符串传递给 Uri 构造函数,就会带来以下 URI:

https://www.contoso.com/Customer('1/3812')/

将路径拆分成段将会生成以下元素:

Customer('1

3812')

这不是请求的发件人的意图。

如果 unescapeRequestUrl 特性设置为 false,则当 HttpListener 接收了请求时,它会使用原始 URI,而不是由 http.sys 转换而来,作为 Url 属性的输入的 URI。

unescapeRequestUrl 特性的默认值为 true

UnescapeRequestUrl 属性可用于从适用的配置文件获取 unescapeRequestUrl 特性的当前值。

示例

下面的代码示例示出如何配置 HttpListener 类,前提是在其接收使用原始 URI 请求,而不是从作为输入的 http.sys 转换为 Url 属性的请求时。

<configuration>
  <system.net>
    <settings>
      <httpListener
        unescapeRequestUrl="false"
      />
    </settings>
  </system.net>
</configuration>

元素信息

命名空间

System.Net

架构名称

验证文件

是否可以为空

请参见

参考

网络设置架构

HttpListenerElement

HttpListener

Url