Ne peut pas envoyer un corps de contenu avec ce type de verbe
je viens de recevoir cette exception (ProtocolViolationException) dans mon application .net 2.0 (fonctionnant sur Windows mobile 6 émulateur standard). Ce qui me trouble, c'est que pour autant que je sache, je n'ai ajouté aucun corps de contenu, à moins que je ne l'ai fait par inadvertance d'une façon ou d'une autre. Mon code est ci-dessous (très simple). Y a-t-il autre chose que je dois faire pour convaincre .NET que ce n'est qu'un accès http?
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);
3 réponses
Ne faites pas la demande de flux, tout simplement. Les requêtes GET ne sont pas habituellement ont des corps (même si c'est qui n'est pas techniquement interdit par HTTP ) et WebRequest
ne le supporte pas - mais c'est à cela que sert l'appel GetRequestStream
, fournissant des données corporelles pour la requête.
étant donné que vous essayez de lire à partir du flux, il me semble que vous voulez réellement obtenir la réponse et lire le flux de réponse à partir de cela:
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].ToString());
de l'en-Tête(réf demande, p_Method);
et L'en-tête de la méthode:
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;
}
veuillez définir le type de contenu de la requête avant de lire le flux de réponse;
request.ContentType = "text/xml";