Вы можете создавать и применять собственные поставщики сжатия. Например, чтобы использовать Deflate сжатие:
using Microsoft.AspNetCore.ResponseCompression;
using System.IO;
using System.IO.Compression;
namespace CompressionApp
{
public class DeflateCompressionProvider : ICompressionProvider
{
public string EncodingName => "deflate";
public bool SupportsFlush => true;
public Stream CreateStream(Stream outputStream)
{
return new DeflateStream(outputStream, CompressionLevel.Optimal);
}
}
}
Свойство EncodingName
указывает формат сжатия, который поддерживает клиент. Этот формат содержится в заголовке Accept-Encoding
в запросе к серверу, например:
Accept-Encoding: gzip, deflate, sdch, br
То есть этот провайдер будет работать, если клиент отправил значение deflate
в запросе в заголовке Accept-Encoding
.
Свойство SupportsFlush
указывает, сбрасывается ли запись в поток.
Метод CreateStream ()
возвращает сам поток ответов после сжатия или фактического переноса в исходный поток ответов, который передается методу в качестве параметра. Для сжатия используется встроенный класс DeflateStream ().
Примените этого провайдера в методе ConfigureServices()
класса Startup
:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options =>
{
options.Providers.Add(new DeflateCompressionProvider());
});
}
Чтобы добавить провайдера, вызывается метод options.Providers.Add()
.