文章内容
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()
黄兵个人博客原创。
评论列表