Introduction
This tip will help to create an action filter to compress the contents like Json, partial view, etc.
Using the Code
Step 1: Create a class which will be derived from ActionFilterAttribute
.
Step 2: Overwrite the method 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);
}
}
}
Step 3: In this method, check the request header if it contains the gzip or deflate encoding. If yes, then add the response with the compression filter.
Step 4: Use the attribute on top of action of a controller.
[Compress]
public ActionResult ShowMeritUsageResults(FormCollection model)
{
}
Points of Interest
Install the fiddler, and see the difference between the size before and after compression. Please find the code here.
History
-
17th April, 2014: Initial version