«Не удалось определить формат URI» с помощью WebRequest - PullRequest
11 голосов
/ 25 мая 2009

Я пытаюсь выполнить POST для сайта, используя WebRequest в C #. Сайт, на который я отправляю сообщения, является сайтом SMS, а текст сообщения является частью URL. Чтобы избежать пробелов в URL, я вызываю HttpUtility.Encode (), чтобы URL кодировал его.

Но я продолжаю получать URIFormatException - «Неверный URI: невозможно определить формат URI» - когда я использую код, подобный следующему:

string url = "http://www.stackoverflow.com?question=a sentence with spaces";
string encoded = HttpUtility.UrlEncode(url);

WebRequest r = WebRequest.Create(encoded);
r.Method = "POST";
r.ContentLength = encoded.Length;
WebResponse response = r.GetResponse();

Исключение возникает, когда я вызываю WebRequest.Create ().

Что я делаю не так?

Ответы [ 2 ]

16 голосов
/ 25 мая 2009

Вы должны кодировать только аргумент, а не весь URL, поэтому попробуйте:

string url = "http://www.stackoverflow.com?question=" + HttpUtility.UrlEncode("a sentence with spaces");

WebRequest r = WebRequest.Create(url);
r.Method = "POST";
r.ContentLength = encoded.Length;
WebResponse response = r.GetResponse();

Кодирование всего URL будет означать: // и? закодировать тоже. Закодированная строка больше не является действительным URL.

1 голос
/ 25 мая 2009

UrlEncode следует использовать только в строке запроса. Попробуйте это:

string query = "a sentence with spaces";
string encoded = "http://www.stackoverflow.com/?question=" + HttpUtility.UrlEncode(query);

Текущая версия вашего кода urlencoding косая черта и двоеточие в URL, что запутывает веб-запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...