2010-09-27 40 views
35

如何壓縮asp.net mvc應用程序發送的輸出?如何在asp.net MVC中gzip內容?

+0

爲什麼不只是設置''或'甚至在''web.comfig' HTTP:/ /www.iis.net/configreference/system.webserver/httpcompression http://stackoverflow.com/questions/9235337/gzipping-content-files-in-asp-net-mvc-3? – Kuncevic 2013-12-30 00:56:59

回答

83

這是我用什麼(因爲這矩估計的時間):

using System.IO.Compression; 

public class CompressAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

     var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"]; 
     if (string.IsNullOrEmpty(encodingsAccepted)) return; 

     encodingsAccepted = encodingsAccepted.ToLowerInvariant(); 
     var response = filterContext.HttpContext.Response; 

     if (encodingsAccepted.Contains("deflate")) 
     { 
      response.AppendHeader("Content-encoding", "deflate"); 
      response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); 
     } 
     else if (encodingsAccepted.Contains("gzip")) 
     { 
      response.AppendHeader("Content-encoding", "gzip"); 
      response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); 
     } 
    } 
} 

使用在控制器:

[Compress] 
public class BookingController : BaseController 
{...} 

還有其他的變數,但是這個效果很好。 (順便說一句,我使用[壓縮]屬性我BaseController保存整個項目重複,而上述由控制器基礎做一個控制器上。

[編輯]如上段所述。至簡化使用,也可以包括在BaseController本身[Compress]單衝,因此,每一個繼承子控制器默認訪問功能:

[Compress] 
public class BaseController : Controller 
{...} 
+0

相同的概念:)實際上,幾乎相同的代碼 – veggerby 2010-09-27 09:27:51

+0

,看着你的例子 - 非常相似 - 真是令人毛骨悚然:)。我已經使用這個代碼一年多了,所以可以驗證它的工作得很好... – 2010-09-27 09:31:42

+0

是可能的,我可以在web.config中做一些設置來進行壓縮。還有一件事我想知道,如何檢查我們在這裏運行的壓縮代碼將多少開銷添加到服務器。 – 2010-09-27 11:51:43

5

看一看這篇文章,概述了一個漂亮的方法利用措施篩選

http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx

例如

[CompressFilter] 
public void Category(string name, int? page) 

而作爲一個額外的好處,它也包括一個CacheFilter

+0

okie,測試這一點,我想知道的另一件事,我如何檢查從服務器獲取的數據是否是gzipped? – 2010-09-27 09:13:59

+0

在本文中使用Firebug並查看響應頭文件 – veggerby 2010-09-27 09:15:36

+1

不適用於MVC5,IIS 8.5和.Net 4.5,我們將不勝感激。 – 2015-07-21 12:34:02

相關問題