如何启用IIS7来gzip静态文件,如js和css,如何在发送到客户端之前测试IIS7是否真正gziping它们?
我目前正在努力将我的一些MVC3控制器迁移到MVC4 Api控制器.我已经通过inherting ActionFilterAttribute和overriding方法实现了MVC3控制器获取方法响应的压缩机制OnActionExecutiong.经过一番研究,我发现,我需要使用ActionFilterMethod的System.Web.HttpFilters.如果有人可以分享一些示例代码,让我开始使用GZip压缩HTTP响应,那将是很棒的
我创建了一个名为AddGZip的扩展方法,如下所示:
public static void AddGZip(this HttpResponse response)
{
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
response.AppendHeader("Content-Encoding", "gzip");
}
Run Code Online (Sandbox Code Playgroud)
这是代码的一个非常简化的版本:
var response = HttpContext.Current.Response;
var request = HttpContext.Current.Request;
var result = File.ReadAllText(path);
if (request.SupportsGZip)
{
response.AddGZip();
}
response.Write(result);
response.Flush();
Run Code Online (Sandbox Code Playgroud)
当您在支持GZip的Web浏览器中查看响应时,会出现如下错误:
"XML解析错误:未关闭的令牌位置:http://webserver1/1234.xml 第78行,第1列:"
当我查看源代码时,它基本上错过了>XML文件末尾的最后一个.所以1或2个字节.
如果我注释掉AddGZip线,它可以正常工作.但是我真的想支持GZip,因为XML可能非常大.
有人对我有建议吗?我已经尝试检查了很多博客,但似乎没有针对此类错误的解决方案.
戴夫