gzip - 使用 RestSharp 发布 GZip 内容

标签 gzip asp.net-web-api restsharp

如何使用 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/

相关文章:

Java - 如何对java对象进行Gzip压缩

linux - 无法在终端中解压缩 .gz 文件 - file.gz : not in gzip format

c# - restsharp 不成功的帖子

c# - 有没有办法使用 RestSharp 仅获取访问 token ?

module - Nginx gzip 过滤器不适用于我的自定义处理程序

asp.net - 当 api 在另一个站点下创建为 Web 应用程序时,路由失败

c# - Angular 到 webapi httppost 调用发送用户对象,一旦它们到达用户 obj 下的 webapi 服务属性将变为 null(usrnm/pswd)

asp.net-web-api - 如何将复杂类型参数(DTO 对象)传递给 GET 请求?

c# - 使用 RESTSHARP 的 OAuth 2 身份验证不起作用

java - java中字符串数据的压缩和解压