65.9K
CodeProject 正在变化。 阅读更多。
Home

压缩的 Action Filter

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (6投票s)

2014年4月17日

CPOL
viewsIcon

20069

downloadIcon

7

本技巧将帮助您创建一个 Action Filter,用于压缩内容,例如 Json、部分视图等。

引言

本技巧将帮助您创建一个 Action Filter,用于压缩内容,例如 Json、部分视图等。

Using the Code

步骤 1:创建一个从 ActionFilterAttribute 派生的类。

步骤 2:重写 OnActionExecuting 方法。

 public class CompressAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpRequestBase request = filterContext.HttpContext.Request;
 
            string Encodingtype = request.Headers["Accept-Encoding"];
 
            if (string.IsNullOrEmpty(Encodingtype)) return;
 
            Encodingtype = Encodingtype.ToUpperInvariant();
 
            HttpResponseBase responseMessage = filterContext.HttpContext.Response;
 
            if (Encodingtype.Contains("GZIP"))
            {
                responseMessage.AppendHeader("Content-encoding", "gzip");
                responseMessage.Filter = new GZipStream(responseMessage.Filter, CompressionMode.Compress);
            }
            else if (Encodingtype.Contains("DEFLATE"))
            {
                responseMessage.AppendHeader("Content-encoding", "deflate");
                responseMessage.Filter = new DeflateStream(responseMessage.Filter, CompressionMode.Compress);
            }
        }
    }  

步骤 3:在此方法中,检查请求头是否包含 gzip 或 deflate 编码。如果是,则添加带有压缩过滤器的响应。

步骤 4:在控制器的 Action 之上使用该属性。

  [Compress]
        public ActionResult ShowMeritUsageResults(FormCollection model)
        {
  // test code....
        }  

关注点

安装 Fiddler,查看压缩前后大小的差异。请在此处找到代码 https://git.codeproject.com/gunjanksaxena/action-filter-for-compression

历史

  • 2014 年 4 月 17 日:初始版本
© . All rights reserved.