Frage Es kann kein Inhaltskörper mit diesem Verbtyp gesendet werden


Ich habe gerade diese Ausnahme (ProtocolViolationException) in meiner .NET 2.0 App (läuft auf Windows Mobile 6 Standard-Emulator). Was mich verwirrt ist, dass ich, soweit ich weiß, keinen Inhaltskörper hinzugefügt habe, es sei denn, ich habe es versehentlich irgendwie getan. Mein Code ist unten (sehr einfach). Gibt es noch etwas, was ich tun muss, um .NET zu überzeugen, dass dies nur ein http GET ist?

Vielen Dank, 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


Ursprung


Antworten:


Erhalten Sie nicht einfach den Anfrage-Stream. GET-Anfragen nicht gewöhnlich habe Körper (obwohl es ist nicht technisch durch HTTP verboten) und WebRequest unterstützt es nicht - aber das ist Berufung GetRequestStream ist für das Bereitstellen von Körperdaten für die Anfrage.

Vorausgesetzt, dass Sie es versuchen lesen aus dem Strom sieht es für mich so aus, als würdest du das wirklich bekommen wollen Antwort und lies den Antwort-Stream daraus:

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



Weil Sie den Header nicht angegeben haben.

Ich habe ein erweitertes Beispiel hinzugefügt:

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

Header (ref Anfrage, p_Method);

Und die Methode 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;
}

2
2017-08-18 20:35



Bitte legen Sie den Inhaltstyp der Anfrage fest, bevor Sie den Antwortstream lesen.

 request.ContentType = "text/xml";

-3
2018-04-23 07:29