PROWAREtech
ASP.NET Core: Enable Output Compression
How to enable site-wide compression for HTTP and HTTPS; written in C#.
These examples use .NET Core 3.1, .NET 6 and .NET 8.
Easily enable response compression for an ASP.NET Core Web Application.
Modify the Program.cs file as has been done with this snippet of code (see comments).
using Microsoft.AspNetCore.ResponseCompression;
var builder = WebApplication.CreateBuilder(args);
// ...
builder.Services.AddResponseCompression(options =>
{
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
// NOTE: could also add the DeflateCompressionProvider here
options.EnableForHttps = true; // NOTE: compress over HTTPS, too
options.MimeTypes = new string[] { "image/svg+xml", "application/pdf", "application/json", "application/javascript", "application/rtf", "application/xhtml+xml", "application/xml", "text/*", "model/gltf+json" }; // NOTE: add MIME-Types to compress here
});
builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Optimal; // NOTE: this takes longer to compress but it is not as aggressive as the Optimal setting when using the compression classes directly
});
builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Optimal;
});
// ...
var app = builder.Build();
app.UseResponseCompression(); // NOTE: call this soon after the line of "var app = builder.Build();"
// ...
USE THIS UTILITY TO TEST THE HTTP COMPRESSION.
Modify the Startup.cs file. Under the ConfigureServices()
method, add the BrotliCompressionProvider
and set the compression level to Optimal
which is a balance between compression speed and compression ratio. Finally, add the middleware app.UseResponseCompression()
BEFORE the other middleware components.
// Startup.cs
using System.IO.Compression;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.ResponseCompression;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace ProjectName
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddResponseCompression(options =>
{
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
options.EnableForHttps = true; // OPTIONAL - enable for sites that use HTTPS
options.MimeTypes = new string[] { "image/svg+xml", "application/*", "text/*" }; // this should compress what needs to be compressed
});
services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Optimal; // OPTIMAL is just that, not too fast or slow - this may or may not fit all websites' needs
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseResponseCompression(); // call this before app.UseStaticFiles(); and other middleware
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
USE THIS UTILITY TO TEST THE HTTP COMPRESSION.
Coding Video
Comment