当我创建带有点段的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?还是我需要自定义实现?

最佳答案

如果使用的是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方案的构造函数。

09-30 16:56
查看更多