ASP.NET MVC - Response.Filter имеет значение null при использовании ActionFilterAttribute в RegisterGlobalFilters ()

Я хочу использовать G-ZIP на своем сайте, я погуглил следующий код:

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

Я не хочу вручную делать это на каждом фрагменте кода, поэтому я зарегистрировал этот атрибут в

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

Но когда я запускаю приложение, в этой строке кода возникает исключение:

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

ответ. Фильтр пуст.

Я хочу знать, почему это происходит и как это решить. Спасибо!

- Обновить:

Я обнаружил, что исключение происходит только тогда, когда контроллер содержит дочернее действие, и оно вызывается.

Ответы на вопрос(1)

Ваш ответ на вопрос