2017-10-19 66 views
1

我爲我的asp.net核心1應用程序啓用了響應壓縮中間件。我注意到,啓用後,我現在看到視圖響應具有內容編碼g-zip,因此它適用於html。用於靜態文件的.NET核心響應壓縮中間件

但是,我試圖啓用它,以便從項目的wwwroot請求的靜態文件也發送g-zip。例如在視圖頭部或css文件中引用的js文件。目前這還不行,因爲我發現這些文件沒有發送g-zip的內容編碼。是否有可能做我想做的事情,還是中間件在從wwwroot請求資產時沒有啓動?下面的代碼中配置服務:

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

代碼配置:

app.UseResponseCompression(); 

我也使用useStaticFiles() - 不知道這會如何影響我嘗試用壓縮做。

+0

也許這是你的中間件的順序,你以前'UseResponseCompression'了'UseStaticFiles'?嘗試顛倒它們。 – DavidG

+0

是的,認爲這可能會導致問題? – user3427689

+0

哪個是之前?中間件按您在代碼中指定的順序執行。因此,您可能需要在添加靜態文件之前添加壓縮。 – DavidG

回答

1

訂單或您的中間件非常重要 - 它決定了每個項目的運行順序。您當前的代碼會是這個樣子:

app.UseStaticFiles(); 

//snip 

app.UseResponseCompression(); 

注意,靜態文件會響應壓縮中間件組件運行之前送達。

所以你真正需要做的是確保壓縮在管道更早補充說:

//Near the start 
app.UseResponseCompression(); 

//snip 

app.UseStaticFiles(); 
相關問題