关于 c#:httpWebRequest.AutomaticDecompression 未设置”Accept_Encoding:gzip”标头

httpWebRequest.AutomaticDecompression does not set "Accept_Encoding: gzip" header

我在我的 .net 3.0 应用程序中使用 Web 服务引用,并且正在尝试设置 gzip 解码。

当我使用 SoapUI 时,响应是用 gzip 压缩的,因为在请求中设置了标题 \'Accept-Encoding: gzip,deflate\'。发送我的 .net 请求时,它没有此标头,因此服务器未压缩响应。

我找到了这个链接,它准确地描述了我想要做什么。我实现了代码并使用调试器验证它在每个请求上都被执行,但它仍然没有添加 \'Accept-Encoding:gzip\' 标头。

接下来,我通过链接在类中手动添加了标题。

1
httpWebRequest.Headers.Add("Accept-Encoding","gzip");

我终于收到了来自服务器的压缩响应!但是不,现在我得到一个格式错误的 xml 异常,我很确定这是因为即使使用链接中的类设置了以下内容,响应也没有被解压缩。

1
httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip;;

我不明白出了什么问题。

相关讨论

  • .AutomaticDecompression = DecompressionMethods.GZip; 添加 "Accept-Encoding" 标头,设置您自己可能会干扰自动解压缩。您也应该使用 (HttpWebRequest)WebRequest.Create() ,而不是链接到的页面中使用的丑陋反射。
  • 由于我使用的是 Web 引用,因此我只是在引用的 api 中调用方法,而不是显式创建 Web 请求。这些创作是由 .net 以某种方式处理的,这就是我使用这个反射代码的原因。如果我没有为 "Accept-Encoding" 添加标头,即使我设置了 .AutomaticDecompression = DecompressionMethods.GZip; 请求也没有该标头;我看到这个问题是因为我使用的是网络参考吗?

好的,我找到了解决问题的方法。

因为我使用的是网络引用,所以你必须在网络引用对象上设置 EnableDecompression = true。

所以解决方案是这样的

1
2
3
4
var client = new ReferredService
{
    EnableDecompression = true
}

ReferredService 是 Web 引用名称。


以上是关于 c#:httpWebRequest.AutomaticDecompression 未设置”Accept_Encoding:gzip”标头的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>