Pages

Men

rh

10/21/2014

Action Filter for Compression

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