Класс .NET uri искажает URL-адреса
эй,
У меня очень странная проблема с классом Uri.
При формировании URL-адресов, имеющих значения строки запроса, закодированные 2 раза-это показывает правильно. В нем параметры кодируются один раз-свои .Сеть, кажется, автоматически расшифровывает их. Этот вид делает Uri содержащим недопустимый url-адрес.
Например, у меня есть 2 url-адреса:
http://www.google.com/China?depCity=%25E5%259D%258E%25E6%2598%2586 http://www.google.com/China?depCity%3d%e5%9d%8e%e6%98%86
Если я создам Bew Uri, передав URL-адреса в новый Uri(urlString), это даст мне такой результат:
http://www.google.com/China?depCity=%25E5%259D%258E%25E6%2598%2586" http://www.google.com/China?depCity=坎昆
Так что в принципе-вместо того, чтобы делать запрос к url-адресу, который я отправляю, он делает запрос к декодированному url-адресу, который я отправил. Я пробовал отслеживать это с помощью fiddler, и он показывает "??? " вместо китайских иероглифов.
Теперь-мне нужен Uri, чтобы сделать url-адрес таким, как он есть, не делая "волшебного декодирования всякий раз, когда я хочу", потому что это делает ссылку недействительной и запрос терпит неудачу.
У кого-нибудь есть какие-нибудь мысли на этот счет?
ОБНОВЛЕНИЕ
Вот еще кое-что на эту тему:
string originalURL_1 = "http://www.google.com/China?depCity%3d%e5%9d%8e%e6%98%86"; Uri uri1 = new Uri(originalURL_1, true); Uri uri2 = new Uri(originalURL_1, false);
Теперь-это было запущено с использованием .NET 4.5 и выше, результаты выглядят следующим образом:
uri1.AbsoluteUri = http://www.google.com/China?depCity%3d坎昆 uri2.AbsoluteUri = http://www.google.com/China?depCity%3d%E5%9D%8E%E6%98%86
Использование .NET 4.0 и ниже:
uri1.AbsoluteUri = http://www.google.com/China?depCity%3d%E5%9D%8E%E6%98%86 uri2.AbsoluteUri = http://www.google.com/China?depCity%3d%E5%9D%8E%E6%98%86
Кроме того, при использовании необязательного параметра для dontEscape он показывает предупреждение о том, что он устарел и всегда ложен, но на самом деле это ложь. Где-то в классе Uri есть недостаток, поэтому на данный момент кажется, что единственный способ делать запросы-это передавать строку вместо Uri.
Спасибо!
Что я уже пробовал:
попробовал использовать новый Uri(urlString, true), чтобы он не выходил из url-адреса, но он игнорирует его и все равно разрушает ссылки.
Richard Deeming
Использование .NET 4.6.2, new Uri(originalURL_1).AbsoluteUri
возвращается http://www.google.com/China?depCity%3d%E5%9D%8E%E6%98%86
как и ожидалось.
MK-Gii
попробуйте передать true/false в качестве дополнительного параметра. В сообщении говорится, что это устарело и всегда по умолчанию имеет значение "false". Но это не так.