【问题标题】:MVC HTML Compress filter exception when using html.action in view在视图中使用 html.action 时 MVC HTML Compress 过滤器异常
【发布时间】:2016-03-03 14:51:39
【问题描述】:

代码取自Codeproject

当在 主视图 中使用 Html.action 来呈现 局部视图 时,它给我的值在 response.Filter 上不能为空异常。

过滤器

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new CompressAttribute());
    }
}

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

查看

<div>
   @Html.Action("GetAccountCompanies", "Account")
</div>

动作

[HttpGet]
[ChildActionOnly]
public PartialViewResult GetAccountCompanies()
{
     return PartialView("~/Views/Shared/_AccountCompanies.cshtml");
}

异常

response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);

Response.Filter = 值不能为空

当我注释掉时过滤器起作用

@Html.Action("GetAccountCompanies", "Account")

【问题讨论】:

    标签: c# html asp.net .net asp.net-mvc


    【解决方案1】:

    每个动作都会调用CompressAttribute,因此我们需要确保不压缩子动作,(response.filter == null)

    public class CompressAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var response = filterContext.HttpContext.Response;
    
            if (response.Filter != null)
            {
                var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
                if (string.IsNullOrEmpty(encodingsAccepted)) return;
    
                encodingsAccepted = encodingsAccepted.ToLowerInvariant();
    
                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);
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2020-04-19
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      相关资源
      最近更新 更多