如何使用 RestSharp 发布 GZip 数据。我有以下代码,但它没有按我的预期工作:
var restRequest = new RestRequest(url, Method.POST)
{
Timeout = Constants.DefaultTimeoutMilliseconds
};
var dataStream = new MemoryStream();
using (var zipStream = new GZipStream(dataStream, CompressionMode.Compress))
{
using (var writer = new StreamWriter(zipStream))
{
writer.Write(new DotNetXmlSerializer().Serialize(content));
}
}
var compressedBytes = dataStream.ToArray();
restRequest.AddParameter("application/x-gzip", compressedBytes, ParameterType.RequestBody);
return _restClient.Execute<TResponseData>(restRequest);
当我运行它并检查wireshark跟踪时,compressedBytes变量被发布为 'System.Byte[]' - 就好像已对其调用了 ToString(),尽管参数是 system.object。
如果我使用 Convert.ToBase64String() 和 Encoding.Utf8.GetString() 将压缩的字节数组作为字符串传递,那么我无法在服务器上解压缩 GZip。我只是得到“System.IO.InvalidDataException:GZip header 中的魔数(Magic Number)不正确”。确保您传递的是 GZip'。
有没有办法使用 RestSharp 发布 Gzipped 数据?
最佳答案
确保您已更新到最新版本的 RestSharp(例如 104.4.0),因为这是以前版本中的错误。 我认为这个问题在 104.2 中得到了修复,其中二进制数据的 PUT 或 POST 最终以 System.Byte[] 表示为字符串。
更新您的 NuGet 引用并重试。祝你好运!
关于gzip - 使用 RestSharp 发布 GZip 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20747595/