Я видел несколько сообщений, которые спрашивают об использовании несоответствующего Уриса, но ни один из них не имеет хорошего ответа. Я пишу элемент управления Windows Phone и ему нужно запросить данные ATOM с помощью HTTP GET. URL должен содержать символы% 3d (знак равенства). Это не подлежит обсуждению, поскольку это сторонний сервис, над которым я не контролирую. Представьте URL вроде следующего:Литературный запрос Uri
http://host.com?arg1=val1&arg=val2%3d
Я использую WebClient с DownloadStringAsync, но он принимает только объекты Uri, а не URL в строках. Объект Uri автоматически декодирует эти символы и посылает:
http://host.com?arg1=val1&arg=val2=
Это терпит неудачу. Существует устаревший аргумент конструктора «UserExcaped», который именно то, что мне нужно, но он недоступен. Я боюсь, что мой единственный вариант - реализовать собственный метод загрузки строк с использованием сырого сокета и минимальной поддержки HTTP.
Любые другие мысли? Помощь очень ценится !!
UPDATE
string apps = "http://blah.com/api?prev=AAAAAAA%3d&next=BBBBBBB"; var u = new Uri(apps); string apps2 = u.ToString(); Debug.Assert(apps == apps2); // That %3d will always be converted to an equals sign
Я хотел бы также отметить, что, если я стараюсь быть умным, кодируя процента, как% 25 (так что "пред = AAAAAA% 253d & следующая = BBBBB"), то я получите точную литеральную строку с% 25, все еще неповрежденной! Это просто% 3d, что агрессивно относится к конвертации в знак равенства.
есть способ, который можно установить на страницах страницу ResponseEncoding = «ISO-8859-1», это звучит как вопрос кодирования – MethodMan
Вы пробовали с помощью HttpUtility.UrlEncode или HttpUtility.UrlDecode, и т.д ..? Я определенно попал на серверы с закодированными параметрами, но вместо этого использовал HttpWebRequest. –
Хммм ... Я добавил пример на мой вопрос. Как только вы попытаетесь создать URI, это испортит его. –