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 является последним фильтром по умолчанию, и нет способа изменить это. Кто-нибудь может это подтвердить?

6
задан vtortola 2 August 2011 в 09:13
поделиться