我已经看到了一些关于如何在自托管Web设置(非IIS)中启用压缩的示例。
EG。这是为ASP .NET 5创建的 http://www.erwinvandervalk.net/2015/02/enabling-gzip-compression-in-webapi-and.html
这不适用于.NET Core RC1,因为HttpContext.Response.Body流被标记为不可读。
如何在ASP 6 / .NET Core RC1或RC2中启用压缩?
答案 0 :(得分:3)
压缩是ASP.net Core 1.1的一项新功能:
这是您需要的套餐。 https://www.nuget.org/packages/Microsoft.AspNetCore.ResponseCompression/
这是一些显示如何使用它的官方微软视频:https://youtu.be/IfLg6LQCl-Y?t=223
一些背景信息:https://github.com/aspnet/BasicMiddleware/issues/34
代码:
Project.json:
"dependencies": {
...,
"Microsoft.AspNetCore.ResponseCompression": "1.0.0"
}
Startup.cs:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
//Add Middleware
app.UseResponseCompression();
...
}
public void ConfigureServices(IServiceCollection services)
{
//Configure Compression level
services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);
//Add Response compression services
services.AddResponseCompression(options =>
{
options.Providers.Add<GzipCompressionProvider>();
});
}
答案 1 :(得分:1)
我一直在使用http://www.webpagetest.org/和我在SmarterAsp.Net上托管的AspNetCore网站进行测试 - &gt;我必须执行以下操作才能获得A进行压缩。
添加此依赖项:
"System.IO.Compression": "4.1.0-rc2-24027",
我的startup.cs:
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
context.Response.Headers.Add("Content-encoding", "gzip");
context.Response.Body = new System.IO.Compression.GZipStream(context.Response.Body,
System.IO.Compression.CompressionMode.Compress);
await next();
await context.Response.Body.FlushAsync();
});
答案 2 :(得分:0)
查看此Post。他们使用我刚刚测试的中间件方法,它似乎正在工作。对于asp.net核心,它看起来像这样:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(LogLevel.Debug);
app.Use(async (context, next) => {
context.Response.Headers.Remove("Content-Type");
context.Response.Headers.Add("Content-encoding", "gzip");
context.Response.Headers.Add("Content-Type", "application/json");
context.Response.Body = new System.IO.Compression.GZipStream(context.Response.Body, System.IO.Compression.CompressionMode.Compress);
await next();
await context.Response.Body.FlushAsync();
})
.UseMvc();
}
您也可以尝试使用IResultFilter.OnActionExecuted,因为结果可能尚未计算。