站长  发布于 2025-08-03 22:58:26  阅读(178)  点赞(0)  评论(0)

    .NET 6响应动态及静态资源压缩实现,.NET可以跨平台部署了,在windows下IIS可能配置很多功能,如动态压缩和静态压缩只要在IIS中勾上就行了,但是到了LINUX下部署却没有这么方便的配置功能,要么套一层代理如NGINX,在代更中配置,要么就需要代码实现,本文重点介绍代码如何实现动态及静态资源压缩。

一、在(appsettings.json\appsettings.Development.json)中添加是否开启压缩的配置,因为部署在Windows下用IIS的压缩功能就行了:

"appSettings": {
  "UseGzip": true
},

二、在Program.cs中添加开启压缩的代码:

var builder = WebApplication.CreateBuilder(args);
//在builder初始化之后添加压缩代码
//从appSettings中读取是否开启压缩的配置
bool useGzip = builder.Configuration.GetValue<bool>("appSettings:UseGzip");
//注册压缩
if (useGzip)
{
    //注册压缩配置
    builder.Services.AddResponseCompression(options =>
    {
        options.EnableForHttps = true;
        //添加Brotli压缩,如果浏览器支持Brotli压缩就会优先使用Brotli压缩
        options.Providers.Add<BrotliCompressionProvider>();
        //添加Gzip压缩
        options.Providers.Add<GzipCompressionProvider>();
        //设置支持压缩类型
        options.MimeTypes = ResponseCompressionDefaults.MimeTypes;
        //默认支持以下类型
                //"text/plain",
                //"text/css",
                //"application/javascript",
                //"text/html",
                //"application/xml",
                //"text/xml",
                //"application/json",
                //"text/json",
                //"application/wasm"
    });
    //Brotli压缩
    builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
    {
        //压缩级别,如果CPU及内存不高的情况下只能选择Fastest
        options.Level = CompressionLevel.Fastest;
    });
    //Gzip压缩
    builder.Services.Configure<GzipCompressionProviderOptions>(options =>
    {
        //压缩级别,如果CPU及内存不高的情况下只能选择Fastest
        options.Level = CompressionLevel.Fastest;
    });
}
//builder.Build()
var app = builder.Build();
//在builder.Build()之后设置启用压缩
if (useGzip)
{
    app.UseResponseCompression();
}
//UseStaticFiles必须放在UseResponseCompression之后,否则静态资源压缩不生效
app.UseStaticFiles();

app.UseRouting();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();

三、测试压缩效果:

    打开F12查看html、js、css的响应头,查看是否有content-encoding字段,如果有就表示压缩生效了:

image.png

评论列表
发表评论
请填写昵称