Answers:
您可以通过web.config
以下文件配置压缩:
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
您可以在iis.net/ConfigReference中找到此配置元素的文档。这等效于:
注意:(如注释中所指出),您需要确保已安装Http动态压缩,否则设置doDynamicCompression="true"
将没有任何效果。最快的方法是:
optionalfeatures
(这是进入“打开或关闭Windows功能”窗口的最快方法)optionalfeatures
对我不起作用。而是,导航到“服务器管理器”>“角色”>“滚动到Web服务器(IIS)”>单击“添加角色服务”。现在,确保已安装Web服务器>性能>静态内容压缩和动态内容压缩。
如果您愿意,可以在代码中执行此操作。我将创建一个basecontroller,每个控件都将继承并使用下面的此属性来装饰它。
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);
}
}
}
filter
为空很重要。我用过var response = ...;if( response == null || response.Filter == null)return;
。