使用Kestrel和.NET核心中间件压缩HTTP响应
我希望使用.NETCore和KestrelWeb服务器动态编码HTTP响应。以下代码不起作用,响应无法加载到浏览器中使用Kestrel和.NET核心中间件压缩HTTP响应,.net,asp.net-core-mvc,middleware,kestrel-http-server,.net,Asp.net Core Mvc,Middleware,Kestrel Http Server,我希望使用.NETCore和KestrelWeb服务器动态编码HTTP响应。以下代码不起作用,响应无法加载到浏览器中 var response = context.Response; if (encodingsAccepted.ToArray().Any(x => x.Contains("gzip"))) { // Set Gzip stream. context.Response.Head
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);
}
所有这些都必须在调用下一个中间件之前发生(例如,
\u next.Invoke
或您拥有的东西),然后在调用下一个中间件之后,您应该等待context.Response.Body.FlushAsync()代码>有关响应压缩的详细说明可在此处找到:
快速总结
可通过两个步骤启用压缩:
添加对Microsoft.AspNetCore.ResponseCompression
包的引用
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}
public void Configure(IApplicationBuilder app)
{
app.UseResponseCompression();
...
}
就这样。现在,如果客户端接受压缩编码,响应将被压缩。请注意,如果您使用的是https,则需要使用
AddResponseCompression
调用中的EnableForHttps
选项。裁判: