Не удается отправить контент-тело с помощью этого глагольного типа

Я просто получил это исключение (ProtocolViolationException) в своем приложении .NET 2.0 (работает на стандартном эмуляторе Windows Mobile 6). Меня смущает то, что, насколько я знаю, я не добавил ни одного контента, если я не сделал это каким-то образом непреднамеренно. Мой код ниже (очень простой). Есть ли что-то еще, что мне нужно сделать, чтобы убедить .NET, что это всего лишь HTTP GET?

Спасибо, Брайан

//run get and grab response WebRequest request = WebRequest.Create(get.AbsoluteUri + args); request.Method = "GET"; Stream stream = request.GetRequestStream(); // <= explodes here XmlTextReader reader = new XmlTextReader(stream); 

Не получите stream запроса, просто. Запросы GET обычно не имеют органов (хотя это не является технически запрещенным HTTP ), а WebRequest не поддерживает его, но это то, что вызывает GetRequestStream , предоставляя данные тела для запроса.

Учитывая, что вы пытаетесь читать из streamа, мне кажется, что вы действительно хотите получить ответ и прочитать stream ответов:

 WebRequest request = WebRequest.Create(get.AbsoluteUri + args); request.Method = "GET"; using (WebResponse response = request.GetResponse()) { using (Stream stream = response.GetResponseStream()) { XmlTextReader reader = new XmlTextReader(stream); ... } } 

Потому что вы не указали заголовок.

Я добавил расширенный пример:

 var request = (HttpWebRequest)WebRequest.Create(strServer + strURL.Split('&')[1].ToString()); 

Заголовок (запрос ref, p_Method);

И метод Header:

 private void Header(ref HttpWebRequest p_request, string p_Method) { p_request.ContentType = "application/x-www-form-urlencoded"; p_request.Method = p_Method; p_request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows CE)"; p_request.Host = strServer.Split('/')[2].ToString(); p_request.Accept = "*/*"; if (String.IsNullOrEmpty(strURLReferer)) { p_request.Referer = strServer; } else { p_request.Referer = strURLReferer; } p_request.Headers.Add("Accept-Language", "en-us\r\n"); p_request.Headers.Add("UA-CPU", "x86 \r\n"); p_request.Headers.Add("Cache-Control", "no-cache\r\n"); p_request.KeepAlive = true; } 

Перед тем, как прочитать stream ответов, установите тип содержимого запроса.

  request.ContentType = "text/xml"; 
  • C # - Как сделать HTTP-вызов
  • Interesting Posts

    Как декодировать JSON с неизвестным полем с помощью Gson?

    перебирать все текстовые поля в форме, в том числе внутри группового windows

    Как добавить текст другого цвета в JTextPane

    Кодировка UTF8 длиннее максимальной длины 32766

    Что такое эквивалент cmd для Bash's & (амперсанд) для запуска команды, не дожидаясь ее завершения?

    Тип аксессуара UITableViewCell, проверенный на доступ и установка других непроверенных

    Могу ли я использовать break для выхода из нескольких вложенных циклов?

    Преобразование символа в верхний регистр с использованием регулярных выражений (EditPad Pro)

    Redim сохранить в C #?

    Шаблоны C ++, неопределенная ссылка

    PuTTY вставляет случайные символы во время сеанса

    Макрос Vba для копирования строки из таблицы, если значение в таблице соответствует условию

    Разделение строки на куски определенного размера

    NSDate получить год / месяц / день

    Невозможно прочитать свойство ‘map’ неопределенного в React

    Давайте будем гением компьютера.