Impossible d’envoyer un contenu avec ce type de verbe

Je viens de recevoir cette exception (ProtocolViolationException) dans mon application .NET 2.0 (exécutée sur un émulateur standard Windows Mobile 6). Ce qui me déroute, c’est que pour autant que je sache, je n’ai pas ajouté de corps de contenu, sauf si je l’ai fait par inadvertance. Mon code est ci-dessous (très simple). Y a-t-il autre chose que je dois faire pour convaincre .NET qu’il ne s’agit que d’un http GET?

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

Ne recevez pas le stream de requêtes, tout simplement. Les requêtes GET n’ont généralement pas de corps (même si cela n’est pas techniquement interdit par HTTP ) et WebRequest ne le prend pas en charge – mais c’est ce à quoi GetRequestStream est destiné, fournissant des données de corps pour la requête.

Étant donné que vous essayez de lire à partir du stream, il me semble que vous souhaitez réellement obtenir la réponse et lire le stream de réponses de celui-ci:

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

Parce que vous n’avez pas spécifié l’en-tête.

J’ai ajouté un exemple étendu:

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

En-tête (demande de référence, p_Method);

Et la méthode Header:

 private void Header(ref HttpWebRequest p_request, ssortingng 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].ToSsortingng(); p_request.Accept = "*/*"; if (Ssortingng.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; } 

Veuillez définir le type de contenu de la demande avant de lire le stream de réponses.

  request.ContentType = "text/xml";