繁体   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