【问题标题】:Posting GZip content using RestSharp使用 RestSharp 发布 GZip 内容
【发布时间】:2018-12-17 14:32:08
【问题描述】:

如何使用 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 标头中的幻数不正确。确保您传递的是 GZip'。

有没有办法使用 RestSharp 发布 Gzipped 数据?

【问题讨论】:

    标签: gzip asp.net-web-api restsharp


    【解决方案1】:

    确保您已更新到最新版本的 RestSharp(如 104.4.0),因为这是以前版本中的错误。 我认为这在 104.2 中已修复,其中二进制数据的 PUT 或 POST 最终以 System.Byte[] 表示为字符串。

    更新您的 NuGet 引用并重试。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多