代码之家  ›  专栏  ›  技术社区  ›  Praveen Prasad

如何在asp.netMVC?

  •  39
  • Praveen Prasad  · 技术社区  · 16 年前

    3 回复  |  直到 16 年前
        1
  •  89
  •   Juan Carlos Oropeza    10 年前

    以下是我使用的(截至目前):

    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]属性来保存整个项目的复制,而上面的方法是逐个控制器地进行。

    [编辑] [Compress] 因此,默认情况下,每个继承的子控制器都访问功能:

    [Compress]
    public class BaseController : Controller
    {...}
    
        2
  •  4
  •   Cody Gray Felix    7 年前

    看一看 this article 它概述了一个巧妙的方法,利用行动过滤器。

    例如:

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

    作为额外的好处,它还包括一个缓存过滤器。

        3
  •  3
  •   EKS    8 年前

    对于.NETCore2.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