有没有办法使用Uri类在网址中保留点网段?

时间:2016-10-03 15:24:10

标签: c# uri

当我用点段创建一个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 ?或者我需要自定义实现吗?

1 个答案:

答案 0 :(得分:1)

如果您使用的是HTTP,那么如果您使用Uri类,它将始终转义它们。它逃脱了以下所有因素:file, http, https, net.pipe, and net.tcp

如果您使用的是ftp之类的内容,那么它就无法逃脱,但听起来这并不是您的选择。

来自MSDN's documentation

  

作为某些方案的构造函数中规范化的一部分,   转义表示被压缩。 URI将采用的方案   紧凑的转义序列包括以下内容:file,http,https,   net.pipe和net.tcp。 对于所有其他方案,转义序列是   没有压缩。例如:如果百分比对两个点进行编码" .."如   "%2E%2E"那么URI构造函数会压缩这个序列   方案。例如,以下代码示例显示了一个URI   http方案的构造函数。