c# - 没有访问服务器配置的 asp.net mvc 2 的 GZip 或 Deflate 压缩

标签 c# asp.net-mvc-2 filter gzip deflate

我尝试使用这里描述的方法ASP.NET MVC Action Filter - Caching and Compression .起初结果令人鼓舞,因为服务器确实开始发送 GZip 编码的文件,但在进一步测试后,有时,在带有 Html.RenderAction 部分的页面中,该属性将被调用两次 gziping 已准备好的 gzip 页面。 有谁知道使用 ASP.NET MVC 2 提供压缩页面的更稳定的方法或关于如何修改代码以使其更通用的任何想法?

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

最佳答案

您可以忽略子操作:

if (filterContext.IsChildAction)
{
    return;
}
...

关于c# - 没有访问服务器配置的 asp.net mvc 2 的 GZip 或 Deflate 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5609169/

相关文章:

primefaces - 如何自定义 SelectOneMenu 的过滤功能

asp.net - RedirectToAction MVC2 的问题 - 无法将类型 'System.Web.Mvc.RedirectToRouteResult' 隐式转换为 'System.Web.Mvc.ViewResult'

c# - 带 MVC 的 EF4 问题 - EntityKey、多对多关系等。我缺少什么基本事实?

asp.net-mvc - MvcContrib 网格和显示/编辑模板

r - 根据另一列中的匹配条件过滤列

c# - 图像文件副本,正在被另一个进程使用

c# - 如何删除 roslyn 语法树中的标记。例如从属性中删除虚拟关键字标记?

c# - StackExchange.Redis在redis集群模式下有什么用

c# - MVVM 中的 ViewModel 是什么

android - 如何在 Android 中以更好的质量录制声音并减少噪音