Возникла проблема с декодированием HttpWebRequest моего закодированного URL.
var requestUrl = "https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/"; var request = (HttpWebRequest)WebRequest.Create(requestUrl);
При просмотре конечного запроса URL становится:
https://www.google.com/webmasters/tools/feeds/http://www.example.com//crawlissues/
Что, конечно, возвращает запрос 400 Bad. Я предполагаю, что это что-то связанное с классом URI, а не с HttpWebRequest. Как я могу предотвратить это?
Это раздражающая «функция безопасности» класса Uri.Если вы используете 4.0 или более позднюю версию, вы можете отключить ее в файле конфигурации ;в противном случае вам придется прибегнуть к отражению .
Существует гораздо более простой способ этого
var request=(HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(requestUrl)); request.Headers.Add("Content-Transfer-Encoding","binary");
работал для меня как шарм
Не думаю, что вы можете запросить этот URL.
Не будет декодировать %2F в параметре запроса. Таким образом, это будет работать, если закодированные данные были в параметре запроса:
%2F
requestUrl = "https://google.com/tools?feeds=http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/"; var request = (HttpWebRequest)WebRequest.Create(requestUrl);
Попробуйте изменить метод запроса с POST на GET
Не уверен, но может быть HttpServerUtility.UrlEncode метод поможет.
Upd. В качестве альтернативы вы можете использовать класс WebClient.