使用Uri类是否有保留URL中点段的方法?

3

当我创建带有点段的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 类是遵循 标准(第33页 - remove_dot_segments)的,但是否有办法保留点段而不是自动解析目标 URI,使用 Uri 类?还是我需要一个自定义实现?

你可以使用 uri.OriginalString - KSib
@KSib 发送请求时,原始字符串并不重要。绝对URI才是重要的。 - Selman Genç
1个回答

1
如果您使用HTTP,那么无论如何,如果使用Uri类,它都会对以下所有内容进行转义:file、http、https、net.pipe和net.tcp。如果您使用类似ftp的东西,则不会进行转义,但似乎这对您来说不是一个选项。根据MSDN文档,作为构造函数中规范化的一部分,某些方案的转义表示将被压缩。URI将压缩转义序列的方案包括:file、http、https、net.pipe和net.tcp。对于所有其他方案,转义序列不会被压缩。例如:如果您将两个点“..”编码为“%2E%2E”,则URI构造函数将为某些方案压缩此序列。例如,下面的代码示例显示了用于http方案的URI构造函数。

很不幸。你知道有没有任何第三方库可以实现我想要的功能吗? - Selman Genç
嗯,也许你想做什么?如果你想返回一个带有点的http://... Uri的Uri对象,我想你可能会很难实现。但如果你只是想要一个字符串表示,我相信你可以想出一些办法。 - Abe Miessler
我想保留点号,然后创建一个到该精确URL的请求,因此我猜不仅需要自定义URI实现,因为WebRequest类也遵循相同的标准。 - Selman Genç
看起来 WebRequest 构造函数需要一个字符串作为要访问的 URL。似乎你可以跳过使用 Uri 类,直接传入你想要定位的字符串,对吗? - Abe Miessler
啊,我在想它是否在幕后使用了Uri类。 - Abe Miessler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接