如何让RestSharp正确放气压缩HTTP响应

本文关键字:压缩 HTTP 响应 RestSharp | 更新日期: 2023-09-27 18:09:06

我使用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标头。如果找到,则服务已更改为返回未压缩的数据。

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

如何让RestSharp正确放气压缩HTTP响应

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

请参考:RestSharp压缩请求,同时对服务器进行rest调用