为什么Uri对不同的方案表现不同?

时间:2013-04-19 14:54:54

标签: c# uri url-encoding percent-encoding

在Uri班回答另一个问题时,我发现了一些对我来说很奇怪的东西:

考虑这两个Uris:

var u1 = new Uri("http://a.b:33/abc%2fdef/c?d=f");
var u2 = new Uri("foobar://a.b:33/abc%2fdef/c?d=f");

他们的不同之处仅在于他们的计划。提供的标识符的所有其他元素都是相同的。

那么,当我转储这些Uri实例的Segments属性时,为什么我会看到u1的以下输出:

/ 
abc/ 
def/ 
c 

...但是u2的输出不同了吗?

/ 
abc%2fdef/ 
c 

为什么不同方案的解析行为不同?

1 个答案:

答案 0 :(得分:5)

Uri Class对不同的URI方案使用不同的解析器。例如,对于 http https URI,它使用HttpStyleUriParser,而对于 ftp URI,它使用FtpStyleUriParser }, 等等。具有未知方案的URI由GenericUriParser解析。您可以使用UriParser.Register Method注册新方案。

UriParser.Register(new HttpStyleParser(), "foobar", 33);