4

在用 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");

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

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

/
ABC/
定义/
C

...但是输出不同u2

/
abc%2fdef/
C

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

4

1 回答 1

5

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

UriParser.Register(new HttpStyleParser(), "foobar", 33);
于 2013-04-19T14:59:39.923 回答