.Net Core / DNX和WebApi压缩

时间:2016-06-08 07:33:54

标签: .net asp.net-mvc gzip .net-core-rc1

我已经看到了一些关于如何在自托管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中启用压缩?

3 个答案:

答案 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,因为结果可能尚未计算。