2012-12-09 55 views
2

我的應用程序中有太多的ActionResult,我想向他們添加gzip compersion。在沒有添加屬性的情況下向所有ActionResult添加compersion

是否有任何解決方案以避免向所有人添加屬性ActionResult
像繼承或什麼?

這是我compersion代碼:

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

回答

1

是的,在MVC 3+中 - 將Action Filter添加到全局動作過濾器。在Global.asax.cs或FilterConfig.cs中(取決於您的項目佈局方式),只需在RegisterGlobalFilters方法中添加過濾器即可。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new CompressFilter()); 
} 
+0

同意usr的回答 - 但是,要回答你的問題,是的,你可以註冊一個全局動作過濾器。通過IIS處理gzip壓縮。 – viperguynaz

+0

我也問你:有沒有更好的壓縮解決方案? – Raika

0

你或許應該在所有內容類型,其中,這是有道理的web.config文件中配置gzip壓縮。有一個內置的HTTP模塊。

response.Filter方法不是在ASP.NET中進行HTTP壓縮的最佳實踐。壓縮是爲您處理的基礎架構問題。

+0

如果我的IIS沒有啓用此選項,則web.config設置將不起作用。但是隨着這個屬性一直工作 – Raika

+0

這個屬性壓縮得很厲害(因爲BCL壓縮算法已經很糟糕)並且速度很慢。你在那裏沒有很好的解決方案。 – usr

+0

有沒有更好的壓縮解決方案? – Raika

相關問題