2017-10-19 19 views
1

J'ai activé le middleware de compression de réponse pour mon application asp.net core 1. J'ai remarqué qu'après avoir activé cela, je vois maintenant que la réponse de la vue a un encodage de contenu g-zip, donc ça fonctionne pour le HTML.Middleware de compression .NET Core Response pour les fichiers statiques

Cependant, j'essaie de l'activer afin que les fichiers statiques qui sont demandés à partir de wwwroot du projet soient également envoyés par g-zip. Par exemple un fichier js référencé dans la tête de la vue ou un fichier css. Cela ne fonctionne pas pour le moment car je vois que les fichiers sont envoyés sans encodage de contenu de g-zip. Est-il possible de faire ce que je veux faire, ou est-ce que l'intergiciel ne fonctionne pas lorsque je demande des actifs de wwwroot? Code ci-dessous dans les services de configure:

services.AddResponseCompression(options => 
{ 
    options.Providers.Add<GzipCompressionProvider>(); 
    options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { 
    "image/jpeg", "image/png", "application/font-woff2", "image/svg+xml"}); 
    options.EnableForHttps = true; 
}); 

services.Configure<GzipCompressionProviderOptions>(options => 
{ 
    options.Level = CompressionLevel.Optimal; 
}); 

Code dans Configurer:

app.UseResponseCompression(); 

J'utilise aussi useStaticFiles() - ne sais pas comment cela pourrait affecter ce que je suis en train de faire avec la compression.

+0

Peut-être est l'ordre de votre middleware, vous avez '' UseStaticFiles' avant UseResponseCompression'? Essayez de les inverser. – DavidG

+0

Ouais c'est avant, pensez que cela pourrait causer un problème? – user3427689

+0

Qui est avant? L'intergiciel est exécuté dans l'ordre que vous spécifiez dans le code. Vous devrez donc peut-être ajouter de la compression avant d'ajouter des fichiers statiques. – DavidG

Répondre

1

La commande ou votre middleware est très important - il détermine la séquence d'exécution de chaque élément. Votre code actuel ressemblera à quelque chose comme ceci:

app.UseStaticFiles(); 

//snip 

app.UseResponseCompression(); 

Notez que les fichiers statiques vont être servi avant la compression de réponse exécute des composants middleware.

Donc tout ce que vous avez vraiment besoin de faire est de faire en sorte que la compression est ajoutée beaucoup plus tôt dans le pipeline:

//Near the start 
app.UseResponseCompression(); 

//snip 

app.UseStaticFiles();