This library aggregates all Ogu.Compressions.* packages and provides DI registration extensions
$ dotnet add package Ogu.CompressionsThis library aggregates other Ogu.Compressions.* libraries and provides AddCompressions() extension method to register all compressions.
dotnet add package Ogu.Compressions
Registering provider:
services.AddCompressions();
You can inject ICompressionProvider to resolve compressions based on CompressionType (enum) or encoding names like br, gzip, deflate, snappy, zstd, none.
Example:
private readonly ICompressionProvider _compressionProvider;
public BrotliController(ICompressionProvider compressionProvider)
{
_compressionProvider = compressionProvider;
}
To resolve Brotli:
var brotliCompression = _compressionProvider.GetCompression(CompressionType.Brotli);
Alternatively, you can inject the compression-specific interfaces directly:
private readonly IBrotliCompression _compression;
public BrotliController(IBrotliCompression compression)
{
_compression = compression;
}
Compress
string data = "Hello, World!";
bytes[] compressedData = await _compression.CompressAsync(data);
Decompress
bytes[] decompressedData = await _compression.DecompressAsync(compressedData);
string data = System.Text.Encoding.UTF8.GetString(decompressedData);
Other compression types and their interfaces:
IDeflateCompressionISnappyCompressionIZstdCompressionIGzipCompressionINoneCompressionRegister DecompressionHandler:
services.AddTransient<DecompressionHandler>();
services.AddHttpClient("MySampleApiClient", httpClient =>
{
httpClient.BaseAddress = new Uri("http://....com");
// Inform the service that Brotli decompression is supported
CompressionType.Brotli.AddToRequestHeaders(httpClient.DefaultRequestHeaders);
}).AddHttpMessageHandler<DecompressionHandler>();
Register ICompressionProvider for the handler:
services.AddCompressions();
Example usage:
public class MySampleApiClient : IMySampleApiClient
{
private readonly IHttpClientFactory _httpClientFactory;
public MySampleApiClient(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<IEnumerable<Product>> GetProductsAsync(CancellationToken cancellationToken)
{
var httpClient = _httpClientFactory.CreateClient("MySampleApiClient");
return await httpClient.GetFromJsonAsync<Product[]>(cancellationToken: cancellationToken);
}
}
The DecompressionHandler will automatically decompress the response if it recognizes the content encoding (like br, gzip, etc.). Unknown encodings will be skipped safely and you need to handle it.
| Encoding Name | CompressionType |
|---|---|
| brotli | CompressionType.Brotli |
| br | CompressionType.Brotli |
| deflate | CompressionType.Deflate |
| snappy | CompressionType.Snappy |
| zstandard | CompressionType.Zstd |
| zstd | CompressionType.Zstd |
| gzip | CompressionType.Gzip |
To customize mappings:
services.AddSingleton<ICompressionTypeResolver>(sp =>
new CompressionTypeResolver(new[] {
new KeyValuePair<string, CompressionType>("custom-brotli", CompressionType.Brotli)
}));
This lets you recognize specified aliases (like "custom-brotli" -> CompressionType.Brotli) returned by the server. When you register your custom implementation, default encoding mappings won't be recognized.
If you only need Brotli, install and register:
dotnet add package Ogu.Compressions.Brotli
services.AddBrotliCompression();
services.AddCompressionProvider();
You can customize configuration by passing action delegate:
services.AddBrotliCompression(options =>
{
options.Level = CompressionLevel.Optimal;
options.BufferSize = 4096;
});
Or configure via IOptions<BrotliCompressionOptions>:
services.Configure<BrotliCompressionOptions>(options => { /* configure here */ });
Links: