【问题标题】:WebClient Headers on WP8WP8 上的 WebClient 标头
【发布时间】:2014-05-20 11:22:24
【问题描述】:

请告诉我如何将标头设置为 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 请求,IAsyncResult 结果) 在 System.Net .WebClient.DownloadBitsResponseCallback(IAsyncResult 结果) --- 内部异常堆栈跟踪结束 ---} System.Exception {System.Net.WebException}

【问题讨论】:

  • 你能发布 InnerException 吗?
  • @Raymen 我编辑了我的帖子
  • 作为一个快速的解决方案,不要使用WebClient,而是使用HttpClient

标签: c# windows-phone-8 gzip


【解决方案1】:

试试这个 ::

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

希望它有效:) 干杯。

【讨论】:

  • 在我的 WP8.1 Silverlight 项目中,Property AutomaticDecompression 不可用。任何解决方案的想法?谢谢!
【解决方案2】:

Content-Encoding 标头用于定义请求正文的编码。由于您正在制作GET reuqest,因此问题来自GET 请求不能有正文(如异常消息所示)。如果您尝试定义 response 的编码,则应使用 Accept-Encoding 标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2020-03-05
    • 2012-07-04
    • 2010-10-28
    相关资源
    最近更新 更多