Ответ 1
Я знаю, что это довольно старый пост, но на всякий случай, если он кому-то поможет, вот пакет nuget для выполнения запроса декомпрессии в ядре .net
https://github.com/alexanderkozlenko/aspnetcore-request-decompression
Мне иногда приходится размещать большие полезные запросы 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);
}
}
Я знаю, что это довольно старый пост, но на всякий случай, если он кому-то поможет, вот пакет nuget для выполнения запроса декомпрессии в ядре .net
https://github.com/alexanderkozlenko/aspnetcore-request-decompression
Промежуточное программное обеспечение и сервисы Response Compression предоставляются в автономном режиме в ASPNETCORE.
Вы можете использовать пакет nuget Microsoft.AspNetCore.ResponseCompression, следуя инструкциям в официальных документах ASPNETCORE.