使用Kestrel和.NET核心中间件压缩HTTP响应

时间:2016-05-20 20:59:30

标签: .net asp.net-core-mvc middleware kestrel-http-server

我希望使用.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);


        }

2 个答案:

答案 0 :(得分:2)

有关响应压缩的详细说明,请访问:https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression

快速摘要
压缩可以分两步启用:

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

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseResponseCompression();
    
        ...
    }
    
  3. 就是这样。现在,如果客户端接受压缩编码,则会压缩响应。

答案 1 :(得分:0)

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