Мне нужно загрузить файл (используя существующие конечные точки Flurl-Http [1]), имя которого содержит «#», который, конечно, должен быть экранирован до %23, чтобы не конфликтовать с обнаружением uri-фрагментов.
Но Flurl всегда экранирует остальные, но не этот символ, что приводит к неработающему uri, где половина пути и все параметры запроса отсутствуют, потому что они были проанализированы как uri-фрагмент:
Url url = "http://server/api";
url.AppendPathSegment("item #123.txt");
Console.WriteLine(url.ToString());
Возвращает: http://server/api/item%20#123.txt
Это означает, что HTTP-запрос (с использованием Flurl.Http
) попытается загрузить только несуществующий ресурс http://server/api/item%20
.
Даже когда я предварительно экранирую сегмент, результат все равно становится точно таким же:
url.AppendPathSegment("item %23123.txt");
Console.WriteLine(url.ToString());
Снова возвращает: http://server/api/item%20#123.txt
.
Есть ли способ остановить это «волшебство»?
[1] Это означает, что у меня есть делегаты/интерфейсы, где вводом является существующий экземпляр Flurl.Url
, который я должен изменить.
http://server/api/item%20#123.txt
- обновил вопрос после вашего комментария. - person springy76   schedule 31.07.2017