为什么Uri对不同的方案表现不同?
在与Uriclass级一起回答另一个问题时,我发现了一些对我来说很奇怪的东西:
考虑这两个Uris:
var u1 = new Uri("http://ab:33/abc%2fdef/c?d=f"); var u2 = new Uri("foobar://ab:33/abc%2fdef/c?d=f");
它们的区别仅在于他们的计划。 提供的标识符的所有其他元素都是相同的。
那么,为什么当我转储这些Uri实例的Segments
属性时,我是否会看到u1
的以下输出:
/ ABC / 高清/ C
…但u2
输出不同?
/ ABC%2fdef / C
为什么不同方案的解析行为不同?
Uri类为不同的URI方案使用不同的解析器。 例如,对于http和https URI,它使用HttpStyleUriParser ,而对于ftp URI,它使用FtpStyleUriParser ,依此类推。 具有未知方案的URI由GenericUriParser解析。 您可以使用UriParser.Register方法注册新方案。
UriParser.Register(new HttpStyleParser(), "foobar", 33);