c# asp.net-mvc-2 filter gzip deflate

c# - Compresión GZip o Deflate para asp.net mvc 2 sin acceso a la configuración del servidor



asp.net-mvc-2 filter (1)

Intenté usar el método descrito aquí Filtro de acción ASP.NET MVC: almacenamiento en caché y compresión . Al principio, los resultados fueron alentadores, ya que el servidor comenzó a enviar archivos codificados con GZip, pero luego de probarlos, a veces, en las páginas con partes Html.RenderAction, el atributo se llamaba dos veces gziping en la página previamente comprimida. ¿Alguien sabe un método más estable para servir páginas comprimidas con ASP.NET MVC 2 o alguna idea de cómo modificar el código para que sea más general?

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); } }

}


Podría ignorar las acciones de los niños:

if (filterContext.IsChildAction) { return; } ...