ページの出力を圧縮するためのカスタムフィルターがあります。
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フィルターが圧縮されたコンテンツをキャッシュしていることを確認するにはどうすればよいですか?この例のように「Order」パラメーターを使用するだけで十分ですか?
キャッシュで何が起こっているかをどのように確認できますか?
乾杯。
更新:Fiddlerでテストしましたが、フィルターでどの順序を使用しても機能するようです... gzipエンコードで最初の応答を取得し、クライアントがキャッシュを許可されている場合は、次のリクエストでhttp.302を取得します。サーバーのみが許可されている場合は、gzipエンコーディングを使用したhttp.200を追加
おそらくこれは、OutputCacheがデフォルトで最後のフィルターであり、それを変更する方法がないためです。誰かがこれを確認できますか?