Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

HTTP Respond Content Compression with MVC Controller Action Filter Attribute

0.00/5 (No votes)
24 Nov 2014 1  
HTTP respond data content length compression in MVC web application by an ActionFilter attribute to improve performance in web requests.

Introduction

When we are using a web application, the application transmits large amount of data content between server and client via http responds.

Background

We can reduce to some amount of data content http respond data content length using MVC controller action filter attributes. This helps a lot in web applications to improve performance.

Description with the Code

The following compress filter class inherited from ActionFilterAttribute class represents the "ActionFilter" for compressing any data content send server to client side in web application through http respond like AJAX in IIS server. This is a custom ActionFilter attribute class and you can write in filters folder in MVC web project.

using System.Web;
using System.Web.Mvc;

public class CompressFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(FilterExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;

        string acceptEncoding = request.Headers["Accept-Encoding"];

        if (string.IsNullOrEmpty(acceptEncoding)) return;

        acceptEncoding = acceptEncoding.ToUpperInvariant();

        HttpResponseBase response = filterContext.HttpContext.Response;

        if (acceptEncoding.Contains("GZIP"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }
}

Now, we can use compressFilter attribute bottom of any action in any controller class like the following code snippet.

[CompressFilter]
public ActionResult Index()
 {
 // code here

  return View(model);
}

And we can use filter attributes in any Ajax call action in controller class.

[CompressFilter]
public ActionResult FilterRegions(string countryId)
    {           
        return Json(Model)
    }

Run your application and analysis when your respond is compressed and not. You can feel how much data content is compressed with this method.

Note: When you compress the content whose content length is less than 1000, this method would not be successful, because that takes more time to compress than to send that amount of content.

You can see http content length through Firefox FireBug or Chrome Dev tool.

Normally GZIP compression is allowed by any browser today, even Internet Explorer.

Points of Interest

This method is very easy and successful to compress data content transmission via http request in web application.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here