【问题标题】:Uri with empty Path带有空路径的 Uri
【发布时间】: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 应该是什么(如果它必须不同的话)。

标签: c# .net uri


【解决方案1】:

从 .NET 2.0 开始,您可以通过 OriginalString property 将原始字符串传递给构造函数。序列化Uri 对象时,原始字符串丢失。

如果这不是您想要的,则没有任何帮助。 EqualsToString 方法将始终使用规范化版本。

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多