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