如何gzip压缩在asp.net MVC的内容?

问题描述 投票:39回答:3

如何压缩通过一个asp.net MVC应用程序发送的输出?

asp.net-mvc asp.net-mvc-2 gzip
3个回答
86
投票

下面是我使用(因为这个时刻的):

using  System.IO.Compression;

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}

使用在控制器:

[Compress]
public class BookingController : BaseController
{...}

还有其他的一些变体,但是这个工作得很好。 (顺便说一句,我用我的BaseController [压缩]属性保存整个项目重复,而上面是做什么用控制器根据控制器上。

[编辑]如上段所述。为了简化使用,还可以包括[Compress] ONESHOT在BaseController本身,因此,每一个孩子继承控制器默认访问功能:

[Compress]
public class BaseController : Controller
{...}

4
投票

看看this article其中概述了使用操作过滤器一记漂亮的方法。

例如:

[CompressFilter]
public void Category(string name, int? page)

而作为一个额外的好处,它也包括一个CacheFilter。


1
投票

对于.NET核心2.1存在能够使用的新的封装(Microsoft.AspNetCore.ResponseCompression)

简单的样品要不断前进,在安装包后:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();

        services.AddResponseCompression(options =>
        {
            options.Providers.Add<GzipCompressionProvider>();
            options.EnableForHttps = true;
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseResponseCompression();
    }
}

你可以阅读更多关于它在这里:https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.1&tabs=aspnetcore2x

© www.soinside.com 2019 - 2024. All rights reserved.