OutputCache и пользовательский фильтр сжатия gzip

У меня есть этот настраиваемый фильтр для сжатия вывода моих страниц:

public class EnableCompressionAttribute : ActionFilterAttribute
{
    const CompressionMode compress = CompressionMode.Compress;
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        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, compress);
            response.AppendHeader("Content-Encoding", "gzip");
        }
        else if (acceptEncoding.ToLower().Contains("deflate"))
        {
            response.Filter = new DeflateStream(response.Filter, compress);
            response.AppendHeader("Content-Encoding", "deflate");
        }
    }
}

Я получил код из книги: Pro ASP.NET MVC V2 Framework (мнение эксперта в .NET).

Теперь у меня есть такой метод действия:

[OutputCache(Order=1, Duration=300,VaryByParam="*", VaryByContentEncoding="gzip; deflate")]
[EnableCompression(Order=0)]
public ActionResult About()
{
    return View();
}

Как убедиться, что фильтр OutputCache кэширует сжатое содержимое? Использование параметра «Заказ», как в этом примере, будет достаточно?

Как я могу увидеть, что происходит в кэше?

Ваше здоровье.

ОБНОВЛЕНИЕ: я тестировал Fiddler, очевидно, он работает независимо от того, в каком порядке вы используете фильтры... Я получаю первый ответ с кодировкой gzip и http.302 в следующих запросах, если клиент разрешено кэшировать его или более http.200 с кодировкой gzip, если разрешен только сервер

Вероятно, это связано с тем, что OutputCache по умолчанию является последним фильтром, и изменить его невозможно. Кто-нибудь может это подтвердить?


person vtortola    schedule 29.07.2011    source источник


Ответы (1)


Взгляните на эту страницу, http://www.klopfenstein.net/lorenz.aspx/my-take-on-asp-net-output-caching Там есть полезная информация, особенно совет Джеффа Этвуда по сжатию элементов кэша

Со страницы..

Порядок важен

Приведенный выше ActionFilter обязательно должен запускаться последним: как я недавно обнаружил, как только фильтр действий изменяет результат действия, текущий вызов действия прерывается. Это также означает, что все остальные фильтры действий, которые не успели запуститься, никогда не запустятся. Если вы планируете добавить этот метод кэширования в свой проект, убедитесь, что все фильтры имеют правильный приоритет (используя приоритет порядка, который принимает положительное целое число и упорядочивает от меньшего к большему).

person StefanE    schedule 09.09.2011