Мне нужно использовать службу, которая принимает параметр GET с именем "names []".
Например: GET <a href="http://example.com/name2id?names" rel="nofollow">http://example.com/name2id?names</a>[]=john
Когда я пытаюсь использовать это в C # с помощью WebClient, скобки кодируются в% 5B% 5D, чего не понимает служба. Когда я отправляю вышеупомянутое с помощью моего браузера (без кодировки), все работает нормально.
Вот пример, который не работает:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john"));
}
Контролируется скрипачом, вот запрос:
GET http://example.com/name2id?names%5B%5D=john HTTP/1.1
Host: example.com
Connection: Keep-Alive
Есть ли способ заставить фреймворк НЕ кодировать URL, или каким-либо другим способом обойти эту проблему?
P.S. Я не контролирую API, поэтому не могу это изменить.
UPDATE:
Это немного странно. Я нашел решение, изменив код C # на:
using (var client = new System.Net.WebClient())
{
response = client.DownloadString(new Uri("http://example.com/name2id?names[]=john", true));
}
Обратите внимание на логическое значение dontEscape
в Uri. Это на самом деле не рекомендуется, но это работает? Кто-нибудь может объяснить это?