1

当模块未安装在 IIS 服务器上时,我是否可以从代码中进行动态 GZip 压缩?我的托管公司不想在服务器上安装这个模块,仍在等待他们的理由。

我在本地检查它可以帮助我在允许动态压缩时分配。

亲切的问候

4

1 回答 1

4

您可以使用操作过滤器来实现此目的。

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),我也强烈建议您使用捆绑和缩小。

于 2013-06-11T11:08:52.033 回答