2010-10-20 85 views
68

我刚刚在我的.NET 2.0应用程序(在Windows Mobile 6标准模拟器上运行)中得到了这个异常(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); 

回答

111

不要请求流,很简单。 GET请求不需要通常有机构(尽管它是not technically prohibited by HTTP),并且WebRequest不支持它 - 但这就是调用GetRequestStream用于提供请求的正文数据。

既然你想从流中读取,它看起来像你对我其实是想获得响应和读取的响应流:

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

确实,这正是我想要做的。谢谢。 – 2010-10-20 20:04:50

+10

从技术上讲,GET请求可以包含主体,但.NET不支持生成GET请求。 http://stackoverflow.com/questions/2064281/sending-post-data-with-get-request-valid – mhud 2012-07-10 22:23:36

+1

@mhud:谢谢,将编辑。 – 2012-07-11 06:55:26

2

因为你没不指定标题。

我已经添加扩展的示例:

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

头(参照请求,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; 
} 
-3

你读了响应流之前,请设置请求的内容类型;

request.ContentType = "text/xml"; 
相关问题