2016-05-20 9 views
0

Я ищу кодирование HTTP-ответов «на лету» с использованием .NET Core и веб-сервера Kestrel. Следующий код не работает, ответ не загружается в браузере.Сжатие HTTP-ответов с использованием связующего ПО Kestrel и .NET

 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); 


     } 

ответ

0

Все, что должно произойти до вызова следующего промежуточного уровня (например, _next.Invoke или что там у вас), то после вызова следующего промежуточного уровня, вы должны await context.Response.Body.FlushAsync();.

2

Подробное описание о сжатии ответа доступна здесь: 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(); 
    
        ... 
    } 
    

Вот и все. Теперь ответ будет сжат, если клиент примет кодировку сжатия.