Почему Ури ведет себя по-разному для разных схем?
Разглядывая класс Ури, отвечая на другой вопрос, я обнаружил нечто странное для меня:
Рассмотрим эти два 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
:
/ а / Защита / с
... но другой вывод для u2
?
/ аЬс%2fdef/ с
Почему поведение разбора отличается для разных схем?
1 ответ
Решение
Класс Uri использует разные парсеры для разных схем URI. Например, для URI http и https он использует HttpStyleUriParser, а для URI ftp - FtpStyleUriParser и т. Д. URI с неизвестными схемами анализируются GenericUriParser. Вы можете зарегистрировать новые схемы, используя метод UriParser.Register.
UriParser.Register(new HttpStyleParser(), "foobar", 33);