我使用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正确处理通货紧缩?
更新
最后,我可以更改服务,在请求中查找Accept-Encoding
标头,其值为identity
。如果找到,则更改服务以返回未压缩的数据。
遗憾的是,这不是原始问题的真正解决方案,但它确实解决了我的问题。如果发布了更好的解决方案,我会尝试。
答案 0 :(得分:0)
根据这篇文章,如果您未能在内容类型中传递charset = utf-8,您应该能够处理它。
请参考: RestSharp compress request while making rest call to server