文章内容

2017/10/3 15:56:42,作 者: 黄兵

Response.Filter 为 Null的解决方法

最近在写代码的时候,提示Response.Filter为null,如图所示:

代码如下内容:

#region OnResultExecuted
/// <summary>
/// 返回结果集之后执行的方法
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
return;
}

if (filterContext.Exception != null)
{
return;
}

if (isEnableCompression)
{
HttpRequestBase request = filterContext.HttpContext.Request;
HttpResponseBase response = filterContext.HttpContext.Response;
string acceptEncoding = request.Headers["Accept-Encoding"];

if (acceptEncoding == null)
{
return;
}

if (acceptEncoding.ToLower().Contains("gzip"))
{
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.ToLower().Contains("deflate"))
{
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
response.AppendHeader("Content-Encoding", "deflate");
}
}
}
#endregion

解决办法:

修改如下内容:

如果是子控制器直接返回

if (filterContext.IsChildAction) return;
public class CompressAttribute : ActionFilterAttribute
{    
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
       if (filterContext.IsChildAction) return;

       ...
    }
}

参考资料:ASP.NET MVC - Response.Filter is null when using ActionFilterAttribute in RegisterGlobalFilters()

黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - Response.Filter 为 Null的解决方法

分享到:

发表评论

评论列表