我想用G-ZIP在我的网站,我GOOGLE了下面的代码:
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var acceptEncoding = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (!string.IsNullOrEmpty(acceptEncoding))
{
acceptEncoding = acceptEncoding.ToLower();
var 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);
}
}
}
}
当我的属性设置为一个Controller或Action它工作正常。
[Compress]
public class PostController : Controller
我不想manully做到这一点对每一段代码,所以我注册了这个属性
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new CompressAttribute());
}
但是,当我运行应用程序,例外来到此行的代码:
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
该response.Filter为空。
我想知道为什么发生这种情况,如何解决这个问题。 谢谢!
-更新:
我发现,在发生异常时,只有当控制器包含一个孩子的行动,并且它被调用。