Reputation: 120498
While poking around with the Uri class answering another question, I found something that seems strange to me:
Consider these two 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");
They differ only by their scheme. All other elements of the supplied identifiers are the same.
So, why, when I dump the Segments
property of these Uri instances, do I see the following output for u1
:
/ abc/ def/ c
...but a different output for u2
?
/ abc%2fdef/ c
Why is the the parsing behaviour different for different schemes?
Upvotes: 4
Views: 1504
Reputation: 217351
The Uri Class uses different parsers for different URI schemes. For example, for http and https URIs, it uses a HttpStyleUriParser, while for ftp URIs it uses an FtpStyleUriParser, and so on. URIs with unknown schemes are parsed by a GenericUriParser. You can register new schemes using the UriParser.Register Method.
UriParser.Register(new HttpStyleParser(), "foobar", 33);
Upvotes: 5