Помогите с C # HttpWebRequest URI потерять свою кодировку - PullRequest
10 голосов
/ 18 февраля 2010

Возникла проблема с декодированием 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. Как я могу предотвратить это?

Ответы [ 5 ]

4 голосов
/ 23 октября 2012

Это раздражающая «функция безопасности» класса Uri.Если вы используете 4.0 или более позднюю версию, вы можете отключить ее в файле конфигурации ;в противном случае вам придется прибегнуть к отражению .

1 голос
/ 24 марта 2017

Существует гораздо более простой способ этого

var request=(HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(requestUrl));
request.Headers.Add("Content-Transfer-Encoding","binary");

работал для меня как шарм

1 голос
/ 15 октября 2012

Не думаю, что вы можете запросить этот URL.

Не будет декодировать %2F в параметре запроса. Таким образом, это будет работать, если закодированные данные были в параметре запроса:

requestUrl = "https://google.com/tools?feeds=http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/";   
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
0 голосов
/ 30 ноября 2010

Попробуйте изменить метод запроса с POST на GET

0 голосов
/ 18 февраля 2010

Не уверен, но может быть HttpServerUtility.UrlEncode метод поможет.

Upd. В качестве альтернативы вы можете использовать класс WebClient.

...