2016-05-20 1 views
0

Je cherche à coder les réponses HTTP à la volée en utilisant .NET Core et le serveur web Kestrel. Le code suivant ne fonctionne pas, la réponse ne parvient pas à charger dans le navigateur.Compresser les réponses HTTP en utilisant Kestrel et le middleware core .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); 


     } 

Répondre

0

Tout cela doit se produire avant d'appeler le middleware suivant (par exemple _next.Invoke ou ce que vous avez), puis après avoir invoqué le middleware suivant, vous devriez await context.Response.Body.FlushAsync();.

2

La description détaillée sur la compression de réponse est disponible ici: https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression

Un résumé rapide
compression peut être activée en 2 étapes:

  1. Ajouter une référence à l'ensemble Microsoft.AspNetCore.ResponseCompression.
  2. Activer la compression sur le démarrage de l'application:

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

Voilà. Maintenant, la réponse sera compressée si le client accepte le codage de compression.