当前位置: 首页 > 知识库问答 >
问题:

使用API方法中的GZip响应。NET Core 3.1

公良鸿光
2023-03-14

我需要对.NETCore3.1中单个API方法返回的对象进行GZip,而不需要全局启用GZip。

我是这样做的:

  [HttpGet]
    public async Task<IActionResult> Get()
    {

        var data =new  Foo();
        string serializedData = JsonConvert.SerializeObject(data);


        var bytes = Encoding.UTF8.GetBytes(serializedData);

        using (var msi = new MemoryStream(bytes))
        using (var mso = new MemoryStream())
        {
            using (var gs = new GZipStream(mso, CompressionMode.Compress))
            {
                msi.CopyTo(gs);
            }

            Response.Headers.Add("Content-Encoding", "gzip");
            return Ok(mso.ToArray());
        }

    }

public class Foo
{
    public string Bar { get; set; }

}

当我使用浏览器测试此方法时,我收到以下错误:

GET http://localhost:5000/test net::ERR_CONTENT_DECODING_FAILED 200 (OK)

浏览器似乎无法解码GZip内容。

我想念什么?

共有1个答案

霍书
2023-03-14

好吧,我不得不尝试一下(我还没有那么多使用.Net Core的经验)。但最终很简单:)

[HttpGet]
public void Get()
{
  var data = new Foo();
  data.Bar = new string('a', 100000); // dummy content

  string serializedData = JsonConvert.SerializeObject(data);

  var bytes = Encoding.UTF8.GetBytes(serializedData);

  using (var msi = new MemoryStream(bytes))
  using (var mso = new MemoryStream())
  {
    using (var gs = new GZipStream(mso, CompressionMode.Compress))
    {
      msi.CopyTo(gs);
    }

    Response.Headers.Add("Content-Encoding", "gzip");
    Response.Body.WriteAsync(mso.ToArray());
  }

}
 类似资料:
  • 问题内容: 我有一个用rails编写的api,它在每个请求上均以JSON响应进行响应。 响应可能很大,因此我需要使用gzip压缩JSON响应。 想知道如何在Rails控制器中执行此操作? 我加了线 在config.ru中 我还应该在呈现JSON的行中更改某些内容吗? 另外,我如何检查响应是否为gzip格式。 我从终端发出了curl请求,我只看到普通的普通JSON。 问题答案: 对于以gzip格式的

  • 伙计们,我正在使用api请求来获取一个列表,这是我的代码: 我在这里的问题是,当我试图使用这个列表(跟随列表)之外的display跟进,onSolutions方法我发现它是空的,所以我试图使onSolutions retrun列表,而不是空的,但它不起作用,我得到了这个消息(on响应(呼叫 我不知道该怎么做感谢你的帮助

  • 问题内容: 如何从PHP中的Stackoverflow API中读取响应?响应为GZIP版本。我发现例如以下建议: 但是该功能在我正在使用的安装上不可用。 还有其他简单的方法可以实现它吗? 问题答案: 一种很酷的方法 http://www.php.net/manual/zh/wrappers.compression.php 注意使用流包装 compress.zlib 或使用卷曲 编辑-其他方法已删

  • 我在main.go中创建了一个简单的反向代理,如下所示: 这工作正常,但是,我想记录从服务器返回的响应。我也可以使用Go语言推荐的标准RoundTrip方法中的以下代码来实现这一点: 除了响应之外,上述所有功能都可以正常工作,当内容编码为gzip时,字符串在日志中显示为非utf8 gzip字符。这似乎是golang的疏忽,但可能是我在文档中遗漏了一些东西,我已经读了好几遍了。我不能在这里发布日志,

  • 我试图发送一个包含压缩(gzip)流输出的响应。我当前的代码是: 当我请求这项服务时,我的浏览器中会出现乱七八糟的数据。尽管我的响应正确设置了以下标题,但似乎我遗漏了什么:内容编码:gzip和传输编码:chunked。 在我的单元测试中,如果我提取主体并通过GzipInputStream()读取它,我就能够检索json主体。 当我更换时: 具有 val os=DeflaterOutputStrea

  • 我正在尝试编写一个简单的Jersey应用程序,它将文件从Jersey客户端发送到Jersey服务器并返回。但是,文件似乎只是在从客户端到服务器的过程中编码的,而不是在另一个过程中编码的。我想知道我怎样才能改变这种行为。 我在一个简单的例子中测试了这个: 从记录的转储中,我可以看出请求是按预期进行的:内容编码在头中发出信号,并应用于请求消息体。还设置了接受编码。服务器理解应用的gzip压缩并解压缩请