Tag Archive for compression

Comprimiendo el Response en ASP.NET MVC

Hace unos días escribí acerca de comprimir la salida del response en ASP.net Webfors usando el Global.asax, bien, hoy comparto con ustedes una forma simple y fácil de hacerlo en ASP.net MVC usando ActionFilters.

Simplemente creamos un ActionFilter como este:

using System.IO.Compression;
using System.Web;
using System.Web.Mvc;

namespace Rioshu.Examples
{
    public class CompressAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var request = filterContext.HttpContext.Request;
            var response = filterContext.HttpContext.Response;
            var encoding = request.Headers["Accept-Encoding"];
            if (string.IsNullOrEmpty(encoding))
            {
                return;
            }

            if (encoding.ToLowerInvariant().Contains("gzip"))
            {
                CompressGZip(response);
            }
        }

        static void CompressGZip(HttpResponseBase response)
        {
            response.AppendHeader("Content-Encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}

Y listo!. Para indicarle a nuestra “Acción” que debe comprimirse basta con “adornarla” con el atributo. Entonces sería algo así de sencillo:

using System.Web
using System.Web.Mvc

namespace Rioshu.Example
{
    public class Home
    {
        [Compress]
        public ActionResult Index()
        {
            return View();
        }
    }
}

Simple verdad!

Espero que esto les ayude en algo! Saludos!

Comprimiendo “páginas” en asp.net