【发布时间】:2013-11-05 19:55:19
【问题描述】:
是否可以使用 System.Uri 表示具有空路径组件的 URL?
每当我创建时
new Uri("http://example.com")
.Net (4) 似乎坚持附加一个斜杠,从而创建一个不同的 URL。换句话说,
new Uri("http://example.com").ToString()
返回“http://example.com/”和
new Uri("http://example.com").Equals(new Uri("http://example.com/")) == true
可以抑制这种破坏行为(根据 RFC 3986)还是我必须推出自己的课程?
更新:
看起来我在第 6.2.3 节中错过了这个:
一般来说,一个使用通用语法的 URI 带有一个
空路径应规范化为“/”路径。
但措辞表明这是可选的。所以问题仍然存在:可以让 Uri 不这样做吗?
【问题讨论】:
-
en.wikipedia.org/wiki/URL_normalization "对于 http 和 https URL,RFC 3986 中列出的以下规范化可能会产生等效的 URL,但标准不保证:添加尾随 /目录以斜杠结尾,应包含在 URL 中"
-
@TimSchmelter 对,所以 .Net 正在应用“通常保留语义的标准化”。这意味着它并不总是正确的,就我而言,它是完全错误的。问题是:可以禁用吗?
-
@arbitrix 你能解释一下为什么它对你很重要吗?为什么它“大错特错”?
-
@svick 因为在这个特定的用例中,服务器将裸主机名(200 OK)与附加斜杠的主机名(404 未找到和/或 301 永久重定向)不同。这意味着规范化不保留语义。请注意,我无法控制这一点,我也不想开始讨论这是否可取。
-
@arbitrix 我很困惑。当您向
http://example.com/index.html之类的URI 发出HTTP 请求时,该请求实际上包含GET /index.htm。所以,http://example.com/变成了GET /,但我不知道http://example.com应该是什么(如果它必须不同的话)。