[英].Net Core/DNX and WebApi compression
我已經看到了許多有關如何在自托管Web設置(非IIS)中啟用壓縮的示例。
例如。 這是為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中啟用壓縮?
壓縮是ASP.net Core 1.1的一項新功能:
這是您需要的軟件包。 https://www.nuget.org/packages/Microsoft.AspNetCore.ResponseCompression/
這是一些官方的Microsoft視頻,顯示如何使用它: 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>();
});
}
我一直在使用http://www.webpagetest.org/和在SmarterAsp.Net上托管的AspNetCore網站進行測試->我必須執行以下操作才能獲得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();
});
查看此帖子 。 他們使用了我剛剛測試過的中間件方法,並且似乎可行。 對於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,因為可能尚未計算結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.