在特定情况下,我需要能够在requst / response中禁用压缩。
使用Firefox RestClient我可以将一些xml发布到Web服务并使用单个头参数成功获得一些响应xml" Accept-Encoding" :" " 如果我没有设置这个标题,响应主体会回复压缩响应体中的一些二进制数据(这就是为什么我要在响应中禁用gzip)
现在在我的应用程序中使用相同的标头值(在C#中使用RestSharp),我仍然得到二进制数据(gzip)作为响应。
有人可以说清楚吗?它在RestSharp中是否受支持?
答案 0 :(得分:1)
RestSharp不支持禁用压缩。
如果您查看Http.Sync.cs
第267行中的source code(假设同步请求,则异步在Http.Async.cs
行424中具有相同的代码重复)
webRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip | DecompressionMethods.None;
也就是说,Restsharp用于进行http调用的基础WebRequest
具有硬编码的压缩选项。有一个open issue记录了这个
答案 1 :(得分:1)
这个功能(仅仅是)似乎已被添加,但是悄悄地 - 没有关于问题状态和更改日志的说明。可能还没有经过充分测试?
尽管如此,我最近需要这个功能并对其进行测试 - 它确实有效。只需将RestClient
实例的AutomaticDecompression
属性设置为false
。
如果您打算让RestClient
实例长期存在,请记住在首次使用之前执行此操作 - 该设置似乎在使用后被“锁定”,之后无法更改。在我的情况下,我需要使用和不使用AutomaticDecompression
拨打电话,因此我只创建了两个不同的RestClient
个实例。
答案 2 :(得分:1)
使用RestSharp v106.11.4,我无法按照Bo Ngoh的建议关闭自动减压。在实例化实例时,我在AutomaticDecompression
实例上设置了RestClient
,但是仍然添加了Accept-Encoding
头。
设置此选项和禁用减压的方法是通过ConfigureWebRequest
中公开的RestClient
方法。下面的代码段允许我关闭此功能:
var client = new RestClient();
client.ConfigureWebRequest(wr =>
{
wr.AutomaticDecompression = DecompressionMethods.None;
});
答案 3 :(得分:0)
不确定是否与此相关,但是将来可能会参考
RestRequest具有IList<DecompressionMethods> AllowedDecompressionMethods
,并且在创建新的RestRequest
时该列表为空。仅当调用Execute
方法时,除非它不为空,否则它将填充默认值(None,Deflate和GZip)
要更新所需的减压方法,只需使用名为AddDecompressionMethod
的方法并添加所需的减压方法-就是这样
示例:
var client = new RestClient();
var request = new RestRequest(URL, Method.GET, DataFormat.None);
request.AddDecompressionMethod(DecompressionMethods.GZip);
var response = client.Execute(request);