Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to gzip content in asp.net MVC?

how to compress the output send by an asp.net mvc application??

like image 485
Praveen Prasad Avatar asked Sep 27 '10 08:09

Praveen Prasad


1 Answers

Here's what i use (as of this monent in time):

using  System.IO.Compression;  public class CompressAttribute : ActionFilterAttribute {     public override void OnActionExecuting(ActionExecutingContext filterContext)     {          var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];         if (string.IsNullOrEmpty(encodingsAccepted)) return;          encodingsAccepted = encodingsAccepted.ToLowerInvariant();         var response = filterContext.HttpContext.Response;          if (encodingsAccepted.Contains("deflate"))         {             response.AppendHeader("Content-encoding", "deflate");             response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);         }         else if (encodingsAccepted.Contains("gzip"))         {             response.AppendHeader("Content-encoding", "gzip");             response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);         }     } } 

usage in controller:

[Compress] public class BookingController : BaseController {...} 

there are other varients, but this works quite well. (btw, i use the [Compress] attribute on my BaseController to save duplication across the project, whereas the above is doing it on a controller by controller basis.

[Edit] as mentioned in the para above. to simplify usage, you can also include [Compress] oneshot in the BaseController itself, thereby, every inherited child controller accesses the functionality by default:

[Compress] public class BaseController : Controller {...} 
like image 121
jim tollan Avatar answered Sep 21 '22 04:09

jim tollan