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

75
2017-10-20 19:28


origen


Respuestas:


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

Dado que estás tratando de leer de la transmisión, me parece que realmente quieres obtener el respuesta y lea la secuencia de respuesta 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);
        ...
    }
}

121
2017-10-20 19:30



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

2
2017-08-18 20:35



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

 request.ContentType = "text/xml";

-3
2018-04-23 07:29