Почему Ури ведет себя по-разному для разных схем?

Разглядывая класс Ури, отвечая на другой вопрос, я обнаружил нечто странное для меня:

Рассмотрим эти два 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);
Другие вопросы по тегам