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!
