当模块未安装在 IIS 服务器上时,我是否可以从代码中进行动态 GZip 压缩?我的托管公司不想在服务器上安装这个模块,仍在等待他们的理由。
我在本地检查它可以帮助我在允许动态压缩时分配。
亲切的问候
当模块未安装在 IIS 服务器上时,我是否可以从代码中进行动态 GZip 压缩?我的托管公司不想在服务器上安装这个模块,仍在等待他们的理由。
我在本地检查它可以帮助我在允许动态压缩时分配。
亲切的问候
您可以使用操作过滤器来实现此目的。
public class CompressFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("DEFLATE"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
将此属性添加到所需的控制器
[CompressFilter]
public class HomeController : Controller
或作为全局过滤器。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CompressFilter());
}
}
注意:对于网络资源(Js 和 Css),我也强烈建议您使用捆绑和缩小。