【发布时间】:2010-10-25 04:38:12
【问题描述】:
Uri 类默认为 RFC 2396。对于 OpenID 和 OAuth,我需要符合 RFC 3986 的 Uri 转义。
来自System.Uri class documentation:
默认情况下,URI 中的任何保留字符都会根据 RFC 2396 进行转义。如果启用国际资源标识符或国际域名解析,则此行为会发生变化,在这种情况下,URI 中的保留字符会根据 RFC 3986 进行转义,并且RFC 3987。
该文档还指出,激活此 IRI 模式以及因此 RFC 3986 行为意味着将 uri 部分元素添加到 machine.config 并将其添加到您的 app/web.config 文件:
<configuration>
<uri>
<idn enabled="All" />
<iriParsing enabled="true" />
</uri>
</configuration>
但是无论这是否存在于 .config 文件中,对于 .NET 3.5 SP1 应用程序,我都会得到相同的(非 3986)转义行为。 我还需要做什么才能让Uri.EscapeDataString 使用 RFC 3986 规则?(特别是转义该 RFC 中定义的保留字符)
【问题讨论】:
-
我在语法示例中的错字处添加了一些社区内容。
-
我在内部将此作为 .NET Framework 的错误提交(我为 MSFT 工作)。他们承认这是一个文档错误,因为这个配置设置确实不会使 Uri 类在转义方面表现得像 RFC 3986。
标签: .net openid oauth escaping uri