2010-09-27 80 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