No se puede enviar un cuerpo de contenido con este tipo de verbo

Acabo de recibir esta excepción (ProtocolViolationException) en mi aplicación .NET 2.0 (que se ejecuta en el emulador estándar de Windows Mobile 6). Lo que me confunde es que, hasta donde yo sé, no he agregado ningún cuerpo de contenido, a menos que lo haya hecho inadvertidamente de alguna manera. Mi código está debajo (muy simple). ¿Hay algo más que deba hacer para convencer a .NET de que solo se trata de un http GET?

Gracias, Brian

//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); 

No obtenga la secuencia de solicitud, simplemente. Las solicitudes GET generalmente no tienen cuerpos (a pesar de que no está técnicamente prohibido por HTTP ) y WebRequest no lo admite, pero eso es para lo que llama GetRequestStream , proporcionando datos corporales para la solicitud.

Dado que está tratando de leer de la transmisión, me parece que realmente desea obtener la respuesta y leer la secuencia de respuesta a partir de eso:

 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); ... } } 

Porque no especificaste el encabezado.

He agregado un ejemplo extendido:

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

Encabezado (solicitud de ref, método p_);

Y el método Encabezado:

 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; } 

Configure el Tipo de contenido de la solicitud antes de leer la secuencia de respuesta;

  request.ContentType = "text/xml";