"Формат URI не может быть определен" с помощью WebRequest

Я пытаюсь выполнить POST на сайт с помощью WebRequest в С#. Сайт, на который я отправляю сообщение, является сайтом 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().

Что я делаю неправильно?

Ответ 1

Вы должны только кодировать аргумент, а не весь 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-адресом.

Ответ 2

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

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

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