ページ レベルの出力キャッシュに問題があり、.NET 4.0 ASP.NET Web フォーム アプリケーションのカスタムによって異なります。
URL 書き換えを使用しているため、異なる URL が同じ aspx ハンドラー ページにマップされるため、未加工の URL に基づいてキャッシュを変更したいと考えました。(例: /article-1.aspx と /article-2.aspx の両方が /articlepage.aspx によって処理されます)
私はもう試した
<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="RAWURL" Location="Server" %>
と
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetVaryByCustom("RAWURL");
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
セッションを無効にし、Cookie を設定していないことを確認しました (コード内および Fiddler 内)。
VaryByCustom を削除すると、キャッシュは機能しますが、URL の書き換えのためにコンテンツが明らかに URL と一致しません。
GetVaryByCustomMethod は単純です
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "RAWURL")
{
return context.Request.Current.RawUrl;
}
else
{
return base.GetVaryByCustomString(context, custom);
}
}
このメソッドに何を入れるかは問題ではありません。基本クラスのキャッシングを呼び出すだけでも、機能しなくなります。
この手法は、コントロール レベルの出力キャッシュにうまく使用できますが、ページ レベルでは失敗するだけです。
私は単純なサイトを作成し、VaryByCustom を機能させたので、このサイトにはそれを妨げている何かが明らかにあります。
問題の場所を確認するために実行できるトレース/ログはありますか?