簡體   English   中英

WP8上的WebClient標頭

[英]WebClient Headers on 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.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state)在System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)在System.Net.WebClient.GetWebResponse(WebRequest request,IAsyncResult result) .WebClient.DownloadBitsResponseCallback(IAsyncResult結果)---內部異常堆棧跟蹤的結尾---} System.Exception {System.Net.WebException}

嘗試這個 ::

    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;
     }
   }

希望它有用:)干杯。

Content-Encoding標頭用於定義請求正文的編碼。 由於您要進行GET請求,因此問題來自GET請求不能具有主體(如異常消息所述)。 如果嘗試定義響應的編碼,則應使用Accept-Encoding標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM