2014-05-20 99 views
0

請告訴我如何將標題設置爲webclient? 我試試這個WP8上的WebClient頭文件

WebClient webClient = new WebClient(); 
webClient.Headers["Content-Encoding"] = "gzip"; 
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted); 
webClient.DownloadStringAsync(new Uri("...")); 

但我收到的異常:System.Reflection.TargetInvocationException。 「操作過程中發生異常,導致結果無效。請檢查InnerException以瞭解異常詳細信息。」

  • InnerException {System.Net.WebException:在WebClient請求期間發生異常。 ---> System.Net.ProtocolViolationException:使用此方法的請求不能有請求主體。在System.Net的System.Net.WebClient.GetWebResponse(WebRequest請求,IAsyncResult結果)System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,對象狀態) .WebClient.DownloadBitsResponseCallback(IAsyncResult的結果) ---內部異常堆棧跟蹤---} System.Exception的{System.Net.WebException}
+1

你可以發佈InnerException嗎? – Raymen

+0

@ Raymond我編輯我的帖子 – Nikita

+2

作爲一個快速解決方案,只是不要使用'WebClient',而是使用'HttpClient'。 –

回答

0

的結束Try此::

webClient.Headers["Accept-Encoding"] = "gzip"; 

或即使這

webClient.Headers[HttpRequestHeader.AcceptEncoding] = "gzip"; 

我什至發現像:: WebClient使用HttpWebRequest封面。而HttpWebRequest支持gzip/deflate解壓。請參閱http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.automaticdecompression.aspx

但是,WebClient類不直接公開此屬性。所以你必須從它派生來設置底層HttpWebRequest的屬性。

class MyWebClient : WebClient 
    { 
     protected override WebRequest GetWebRequest(Uri address) 
     { 
     HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest; 
     request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; 
     return request; 
    } 
    } 

希望工程:) 乾杯。

+0

在我的WP8.1 Silverlight項目中,Property AutomaticDecompression不可用。任何解決方案的想法?謝謝! – casaout

0

Content-Encoding標頭用於定義請求的編碼本體。由於您正在製作一個GET reuqest,問題來自於GET請求不能有一個正文(作爲異常消息sais)。如果您嘗試定義響應的編碼,則應使用Accept-Encoding標頭。