无法使用此动词types发送内容主体
我刚刚在我的.NET 2.0应用程序(在Windows Mobile 6标准模拟器上运行)得到这个exception(ProtocolViolationException)。 令我困扰的是,据我所知,我没有添加任何内容主体,除非我不知不觉地做了它。 我的代码是(非常简单)。 还有什么我需要做的说服.NET这只是一个HTTP GET?
谢谢,布莱恩
//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);
不要很简单地获取请求stream。 GET请求通常不具有主体(即使它在技术上不受HTTP WebRequest
), WebRequest
也不支持 – 但是这就是调用GetRequestStream
原因,它提供了请求的主体数据。
考虑到你正在试图从stream中读取 ,它看起来像你真的想要得到的响应,并从中读取响应stream:
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); ... } }
因为你没有指定标题。
我已经添加了一个扩展的例子:
var request = (HttpWebRequest)WebRequest.Create(strServer + strURL.Split('&')[1].ToString());
标题(ref request,p_Method);
和方法头:
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; }
请在读取响应stream之前设置请求内容types;
request.ContentType = "text/xml";