4

我希望使用 .NET Core 和 Kestrel Web 服务器即时编码 HTTP 响应。以下代码不起作用,响应无法在浏览器中加载。

        var response = context.Response;


        if (encodingsAccepted.ToArray().Any(x => x.Contains("gzip")))
        {
            // Set Gzip stream.
            context.Response.Headers.Add("Content-Encoding", "gzip");
            // Wrap response body in Gzip stream.
            var body = context.Response.Body;


            context.Response.Body = new GZipStream(body, CompressionMode.Compress);


        }
4

2 回答 2

10

有关响应压缩的详细说明可在此处获得: https ://docs.microsoft.com/en-us/aspnet/core/performance/response-compression

快速总结
压缩可以通过 2 个步骤启用:

  1. 添加对Microsoft.AspNetCore.ResponseCompression包的引用。
  2. 在应用程序启动时启用压缩:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseResponseCompression();
    
        ...
    }
    

而已。如果客户端接受压缩编码,现在响应将被压缩。

于 2017-04-07T09:34:57.213 回答
0

所有这些都必须在调用下一个中间件(例如_next.Invoke,或者你有什么)之前发生,然后在调用下一个中间件之后,你应该await context.Response.Body.FlushAsync();.

于 2016-06-26T19:51:27.837 回答