2011-04-10 10 views
8

Ho provato a utilizzare il metodo descritto qui ASP.NET MVC Action Filter - Caching and Compression. Inizialmente i risultati sono stati incoraggianti, in quanto il server ha iniziato a inviare file codificati GZip, ma dopo ulteriori test, a volte, nelle pagine con parti Html.RenderAction, l'attributo veniva chiamato due volte gziping nella pagina all gzippata. Qualcuno conosce un metodo più stabile per servire pagine compresse con ASP.NET MVC 2 o qualche idea su come modificare il codice per essere più generale?Compressione GZip o Deflate per asp.net mvc 2 senza accesso alla configurazione del server

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

}

risposta

7

Si potrebbe ignorare le azioni del bambino:

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

funziona come un fascino. Grazie. – mrichana

Problemi correlati