如何压缩由ASP.NET MVC应用程序发送的输出?
以下是我目前使用的内容:
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]属性来避免项目中的重复,而上面的方法则是对每个控制器逐个处理。)
[编辑] 如前面所述,为了简化使用,你也可以在BaseController本身中包含[Compress]
oneshot,因此,每个继承的子控制器默认地访问该功能:
[Compress]
public class BaseController : Controller
{...}
urlCompression
?https://dev59.com/lWDVa4cB1Zd3GeqPcE01?lq=1 - angularrocks.comGlobalFilter.Filters.Add(new CompressionAttribute());
,它可以正常工作 #1!同时颠倒了 if
语句的顺序,以确保当支持两种编码方式时使用 gzip
而不是 deflate
。 - Charles Ouelletdeflate
选项放在第一位,我改变了顺序,现在把 gzip
放在第一位,压缩率提高了约10%。 - Juan Carlos Oropeza[CompressFilter]
public void Category(string name, int? page)
对于.NET Core 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();
}
}
web.config
中设置<urlCompression doDynamicCompression="true" />
或者甚至<urlCompression doStaticCompression="true" doDynamicCompression="true" />
呢?你可以参考这个链接:http://www.iis.net/configreference/system.webserver/httpcompression,以及这个问题的解答:https://dev59.com/lWDVa4cB1Zd3GeqPcE01。 - angularrocks.com