2011-04-10 11 views
8

He intentado utilizar el método descrito aquí ASP.NET MVC Action Filter - Caching and Compression. 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 conoce 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?Compresión GZip o Deflate para asp.net mvc 2 sin acceso a la configuración del servidor

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

}

Respuesta

7

Se podía ignorar las acciones del niño:

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

funciona como un encanto. Gracias. – mrichana

Cuestiones relacionadas