用于静态文件的.NET核心响应压缩中间件

用于静态文件的.NET核心响应压缩中间件

问题描述:

我为我的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

订单或您的中间件非常重要 - 它决定了每个项目的运行顺序。您当前的代码会是这个样子:

app.UseStaticFiles(); 

//snip 

app.UseResponseCompression(); 

注意,静态文件会响应压缩中间件组件运行之前送达。

所以你真正需要做的是确保压缩在管道更早补充说:

//Near the start 
app.UseResponseCompression(); 

//snip 

app.UseStaticFiles();