2010-10-20 19 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"; 
相關問題