压缩的 Action Filter






4.80/5 (6投票s)
本技巧将帮助您创建一个 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 日:初始版本