Я использую какое-то пользовательское промежуточное ПО для сжатия from this repository (вставлено ниже). По первому запросу содержимое сжимается просто отлично. Для каждого запроса после этого ответ возвращается как полностью пустой (с Content-Length of 0).Средство промежуточного сжатия ядра ASP.NET - пустой ответ
Это только начало происходить после перехода с ASP.NET Core RC2 на RTM.
Кто-нибудь знает, почему это происходит?
CompressionMiddleware:
public class CompressionMiddleware
{
private readonly RequestDelegate _next;
public CompressionMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (IsGZipSupported(context))
{
string acceptEncoding = context.Request.Headers["Accept-Encoding"];
var buffer = new MemoryStream();
var stream = context.Response.Body;
context.Response.Body = buffer;
await _next(context);
if (acceptEncoding.Contains("gzip"))
{
var gstream = new GZipStream(stream, CompressionLevel.Optimal);
context.Response.Headers.Add("Content-Encoding", new[] { "gzip" });
buffer.Seek(0, SeekOrigin.Begin);
await buffer.CopyToAsync(gstream);
gstream.Dispose();
}
else
{
var gstream = new DeflateStream(stream, CompressionLevel.Optimal);
context.Response.Headers.Add("Content-Encoding", new[] { "deflate" });
buffer.Seek(0, SeekOrigin.Begin);
await buffer.CopyToAsync(gstream);
gstream.Dispose();
}
}
else
{
await _next(context);
}
}
public bool IsGZipSupported(HttpContext context)
{
string acceptEncoding = context.Request.Headers["Accept-Encoding"];
return !string.IsNullOrEmpty(acceptEncoding) &&
(acceptEncoding.Contains("gzip") || acceptEncoding.Contains("deflate"));
}
}
на самом деле не уверен, что это связано с проблемой, но почему вы не закроете буфера потока в конце концов? – Set
@Set: Брошено следующее: Приложение не обработало необработанное исключение. System.ArgumentException: базовый поток не записывается. – davenewza