我希望使用.NET Core和KestrelWeb服务器即时编码HTTP响应。以下代码不起作用,响应无法在浏览器中加载。
var response = context.Response;
if (encodingsAccepted.ToArray().Any(x => x.Contains("gzip")))
{
// Set Gzip stream.
context.Response.Headers.Add("Content-Encoding", "gzip");
// Wrap response body in Gzip stream.
var body = context.Response.Body;
context.Response.Body = new GZipStream(body, CompressionMode.Compress);
}
有关响应压缩的详细说明可在此处获得:https://learn.microsoft.com/en-us/aspnet/core/performance/response-compression
快速摘要
可以通过 2 个步骤启用压缩:
- 添加对
Microsoft.AspNetCore.ResponseCompression
包的引用。 -
在应用程序启动时启用压缩:
public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); } public void Configure(IApplicationBuilder app) { app.UseResponseCompression(); ... }
就是这样。现在,如果客户端接受压缩编码,响应将被压缩。
必须在调用下一个中间件之前发生(例如 _next.Invoke
或者你有什么),那么在调用下一个中间件后,你应该await context.Response.Body.FlushAsync();
.