2010-10-20 6 views
68

Ich habe diese Ausnahme (ProtocolViolationException) in meiner .NET 2.0-Anwendung (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?Ich kann keinen Inhalts-Body mit diesem Verb-Typ senden

Danke, 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); 

Antwort

111

Sie die Anfrage Strom nicht bekommen, ganz einfach. GET-Anfragen nicht in der Regel haben Körper (obwohl es not technically prohibited by HTTP ist) und WebRequest unterstützt es nicht - aber das ist, was Anruf GetRequestStream ist für, Bereitstellung von Körperdaten für die Anfrage.

Da Sie sind versuchen, lesen aus dem Strom, sieht es für mich wie Sie tatsächlich die Antwort und lesen Sie den Antwortstrom aus, dass zu wollen:

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

tatsächlich das ist genau das, was ich tun wollte. Vielen Dank. –

+10

Technisch gesehen können GET-Anfragen Körper haben, aber .NET unterstützt nicht das Erzeugen von GET-Anfragen mit Körper. http://stackoverflow.com/questions/2064281/sending-post-data-with-get-request-valid – mhud

+1

@mhud: Danke, wird bearbeiten. –

2

Weil Sie didn Geben Sie die Kopfzeile nicht an.

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 Rubrik:

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

Bitte die Anfrage Inhaltstyp festgelegt, bevor Sie den Antwortstream lesen;

request.ContentType = "text/xml"; 
Verwandte Themen