【问题标题】:How to get RestSharp to properly deflate compressed HTTP response?如何让 RestSharp 正确压缩压缩的 HTTP 响应?
【发布时间】:2015-08-21 21:48:43
【问题描述】:

我正在使用RestSharp 调用 REST 服务。我的电话看起来像这样:

var request = new RestRequest("/foo", Method.POST);
request.JsonSerializer.ContentType = "application/json; charset=utf-8";
request.AddJsonBody(new string[] { "param1", "param2" });
var response = this._client.Execute<Foo>(request);

对于大多数其他呼叫,这可以正常工作。当响应被压缩时,我遇到了问题。响应中的标题(大部分)看起来像这样:

HTTP/1.1 200 OK
Uncompressed-Size: 35000
Content-Length: 3019
Content-Encoding: deflate
Content-Type: application/json

问题是当我使用 RestSharp 调用此方法时,我不断收到错误消息:

错误:块长度与其补码不匹配。

我尝试在请求中设置Accept-Encoding 标头,但它仍然会产生错误。我也尝试使用自定义反序列化器,但错误发生在反序列化之前。据我所知,如果Content-Encoding 标头显示deflate(确实如此),RestSharp 应该会自动处理通货紧缩。

如何让 RestSharp 正确处理通货紧缩?

更新

最后,我能够将服务更改为在请求中查找值为identityAccept-Encoding 标头。如果找到,则更改服务以返回未压缩的数据。

不幸的是,这并不是原始问题的真正解决方案,但它确实为我解决了问题。如果发布了更好的解决方案,我会尝试。

【问题讨论】:

  • 有没有找到更好的解决方案?我在调用我无法控制的 API 时遇到了同样的问题。

标签: c# http restsharp compression


【解决方案1】:

根据这篇文章,如果你不会在内容类型中传递 charset=utf-8,你应该能够处理它。

请参考: RestSharp compress request while making rest call to server

【讨论】:

  • 我尝试将请求中的 ContentType 更改为此,但它仍然给我错误:request.JsonSerializer.ContentType = "application/json";
  • 尽量不要发送内容类型
  • 试过了,但不幸的是它仍然没有帮助。
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 2019-04-13
  • 2010-09-22
  • 1970-01-01
相关资源
最近更新 更多