【发布时间】: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 正确处理通货紧缩?
更新
最后,我能够将服务更改为在请求中查找值为identity 的Accept-Encoding 标头。如果找到,则更改服务以返回未压缩的数据。
不幸的是,这并不是原始问题的真正解决方案,但它确实为我解决了问题。如果发布了更好的解决方案,我会尝试。
【问题讨论】:
-
有没有找到更好的解决方案?我在调用我无法控制的 API 时遇到了同样的问题。
标签: c# http restsharp compression