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