簡體   English   中英

.Net Core / DNX和WebApi壓縮

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM