首页新闻找找看学习计划

C# mvc3.0 使用GZIP压缩 黄页乱码

0
悬赏园豆:80 [待解决问题]

GZIP压缩的代码,是网上常见的:

 public class CompressFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string acceptEncoding = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
            if (String.IsNullOrEmpty(acceptEncoding)) return;
            var response = filterContext.HttpContext.Response;
            acceptEncoding = acceptEncoding.ToUpperInvariant();

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

页面报黄页的时候就会乱码,不报错则正常显示,且为GZIP压缩

 

请问这是为什么呢? 大家就没碰到过这个问题吗?

问题补充:

还有,mvc3的网站,要实现GZIP只能使用这个方式实现吗?

因为之前对iis进行了GZIP配置,不管用的。我的iis是6.0的

不怕死的主页 不怕死 | 初学一级 | 园豆:122
提问于:2012-12-11 11:58
< >
分享
所有回答(6)
0

你可以使用 Fiddler 检查下页面的 HEADER,看看正确和错误的有什么不同。

IIS配置的话,需要设置对动态类型压缩。

Launcher | 园豆:45030 (高人七级) | 2012-12-11 13:14

上面的是乱码时的header,下面是正常的:

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-11 14:12
0

把OnException这个方法错误的页面增加GZIP就可以了。

你只设置了执行方法 ,所以错误没有设置。

override void OnException

````` | 园豆:14268 (专家六级) | 2012-12-12 09:37
protected override void OnException(ExceptionContext filterContext)
        {
            string acceptEncoding = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
            if (String.IsNullOrEmpty(acceptEncoding)) return;
            var response = filterContext.HttpContext.Response;
            acceptEncoding = acceptEncoding.ToUpperInvariant();

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

是这样吗?  添加了这个方法还是输出的乱码。

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 13:21

其实之前我有试过这个方法,但是一直使用的是CompressionMode.Compress。刚刚试了下CompressionMode.Decompress,好啦~~。哈哈,谢谢了。

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 13:24

@不怕死: 好了就好 不客气呵呵。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-12-12 13:25

@imfunny: 不好意思,还有一个问题。现在报的是这个问题了。。。

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 13:29

@不怕死: 

responese.Filter这个上面写的应该是有问题的。

尝试重新开启一个对象来显示输出。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-12-12 13:33

@imfunny: 

哎,没解决,不能读取。

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 13:55

@不怕死:

这块检查下其他的。因为这个时候responese.Filter已经压缩,responese.Filter的类型已经是Gzip。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-12-12 14:09

@imfunny: 

具体怎么改呢?

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 14:15

@不怕死: 

var obj = new GzipStream();

response.Filter = obj

基流不可读的时候很多都是线程问题。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-12-12 14:16

@imfunny:

  这个是不行的,GZipStream必须有参数的。

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 14:38

@不怕死: 汗  这个就是随便打的,和你上面的参数是一样的。

var obj = 

response.Filter = obj

 

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-12-12 14:41

@imfunny: 

 

就是不能读取

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 14:55

@不怕死: 看下response.Filter的状态,内存已经包含的响应体是不是都有。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-12-12 15:08

@imfunny: 

这个?

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 15:13

@不怕死: 更详细的。看下byte[]

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-12-12 15:17

@imfunny: 不会看。。

支持(0) 反对(0) 不怕死 | 园豆:122 (初学一级) | 2012-12-12 15:26
0

你遇到的问题我全部遇到了,好巧

达奇 | 园豆:202 (菜鸟二级) | 2013-03-04 20:08

我也是耶,我也遇到了,好巧,好有缘份啊~~~

支持(0) 反对(0) think_fish | 园豆:140 (初学一级) | 2013-03-04 23:05
0

这个有没有解决呢?     

虔城墨客 | 园豆:194 (初学一级) | 2013-03-20 15:05
0

我去,搞了半天还没有解决呀。 我也碰到了。谁解决了。共享一下呀。

康少 | 园豆:197 (初学一级) | 2013-08-19 16:58
0

我上次有这种情况,直接把IIS 里面的GZIP 关闭掉就不会了,两个好像有冲突

最後帝驕傲 | 园豆:202 (菜鸟二级) | 2016-01-19 17:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册