Подтвердить что ты не робот

Запросить декомпрессию содержимого в ASP.Net Core

Мне иногда приходится размещать большие полезные запросы JSON для моих основных контроллеров ASP.Net. Размер ордера на полезную нагрузку (по крайней мере, на мой взгляд) сжимает его. Поскольку основные контроллеры ASP.Net, похоже, не поддерживают сжатый контент-запрос из коробки, я развернул свое собственное промежуточное программное обеспечение.

Реализация этого была настолько тривиальной, что я не уверен, что здесь что-то отсутствует. Либо потому, что есть встроенный способ достижения этого, либо потому, что я сделал некоторую серьезную ошибку с точки зрения безопасности или производительности?

public class GzipRequestContentEncodingMiddleware
{
    public GzipRequestContentEncodingMiddleware(RequestDelegate next)
    {
        if (next == null)
            throw new ArgumentNullException(nameof(next));

        this.next = next;
    }

    private readonly RequestDelegate next;
    private const string ContentEncodingHeader = "Content-Encoding";
    private const string ContentEncodingGzip = "gzip";
    private const string ContentEncodingDeflate = "deflate";

    public async Task Invoke(HttpContext context)
    {
        if (context.Request.Headers.Keys.Contains(ContentEncodingHeader) &&
            (context.Request.Headers[ContentEncodingHeader] == ContentEncodingGzip || 
            context.Request.Headers[ContentEncodingHeader] == ContentEncodingDeflate))
        {
            var contentEncoding = context.Request.Headers[ContentEncodingHeader];
            context.Request.Headers.Remove(ContentEncodingHeader);

            var destination = new MemoryStream();

            using (var decompressor = contentEncoding == ContentEncodingGzip
                ? (Stream) new GZipStream(context.Request.Body, CompressionMode.Decompress, true)
                : (Stream) new DeflateStream(context.Request.Body, CompressionMode.Decompress, true))
            {
                await decompressor.CopyToAsync(destination);
            }

            destination.Seek(0, SeekOrigin.Begin);
            context.Request.Body = destination;
            context.Request.Headers["Content-Length"] = destination.Length.ToString(CultureInfo.InvariantCulture);
        }

        await next(context);
    }
}
4b9b3361