【问题标题】:Is there a way to keep dot segments in url using Uri class?有没有办法使用 Uri 类在 url 中保留点段?
【发布时间】:2016-10-03 15:24:09
【问题描述】:

当我创建一个带有点段的 uri 时:

var uri = new Uri("http://localhost/../../g");

uri类去掉../段,结果uri变成:

http://localhost/g

当点之前有路径时:

var uri = new Uri("http://localhost/a/b/c/./../../g");
// Result: http://localhost/a/g

看起来Uri 类在the standart 之后(第33 页-remove_dot_segments),但是有没有办法使用Uri 类来保留点段而不是自动解析目标uri?还是我需要自定义实现?

【问题讨论】:

  • 你可以使用uri.OriginalString
  • @KSib OriginalString 在发送请求时无关紧要。 AbsoluteUri 很重要

标签: c# uri


【解决方案1】:

如果您使用的是 HTTP,则不会,如果您使用 Uri 类,它将始终转义它们。它为以下所有内容转义:file, http, https, net.pipe, and net.tcp

如果您使用像 ftp 这样的东西,那么它不会逃脱,但听起来这不是您的选择。

来自MSDN's documentation

作为某些方案的构造函数中规范化的一部分, 转义的表示被压缩。 URI 将用于的方案 紧凑的转义序列包括:文件、http、https、 net.pipe 和 net.tcp。 对于所有其他方案,转义序列是 未压缩。例如:如果您将两个点“..”编码为 "%2E%2E" 则 URI 构造函数将压缩此序列一段时间 计划。例如,以下代码示例显示了一个 URI http 方案的构造函数。

【讨论】:

  • 这很不幸。你知道有什么第三方库可以满足我的需求吗?
  • Hrrm 可能,你到底想做什么?如果您想为带有点的http://... Uri 返回一个Uri 对象,我认为您不走运。如果你只是想要一个字符串表示,我相信你可以解决一些问题。
  • 我想保留点,然后创建对那个确切 url 的请求,所以我猜我不仅需要自定义 uri 实现,因为 WebRequest 类遵循相同的标准。
  • 看起来WebRequest 构造函数需要一个字符串来命中 URL。似乎您可以跳过使用 Uri 类并传入您想要定位的字符串,对吗?
  • 啊,我想知道它是否在幕后使用 Uri 类。
猜你喜欢
  • 2020-12-08
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2021-07-25
相关资源
最近更新 更多