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)
{
// test code....
}
Install the fiddler, and see the difference between the size before and after compression.
Source Collected from Codeproject.com
http://www.codeproject.com/Tips/761088/Action-Filter-for-Compression
No comments :
Post a Comment