ASP.Net または Composite C1 CMS での outputcache の動作に関して、次の質問があります (どこに問題があるのかわかりません)。
「City」という名前の Cookie でキャッシュを変更する必要があります。Global.asax では、GetVaryByCustomString メソッドをオーバーライドしました。
public override string GetVaryByCustomString(HttpContext context, string custom)
{
var result = ApplicationLevelEventHandlers.GetVaryByCustomString(context, custom);
if (result == null) {
return base.GetVaryByCustomString(context, custom);
}
HttpCookie cookie = context.Request.Cookies["City"];
string additionalVary = "";
if (cookie != null)
additionalVary = cookie.Value;
else
additionalVary = "Москва";
return String.Concat(result, additionalVary);
}
そして問題は: オーバーライドされた GetVaryByCustomString メソッドのブレークポイントは、ページへの最初のリクエストでのみヒットしますが、キャッシュが実際に期限切れになるまで (私の場合は 60 秒)、次のリクエストではヒットしません。その 60 秒間にクライアント側で Cookie が変更された可能性がありますが、ページは単にキャッシュから取得されます。
どこが間違っていますか?前もって感謝します。
更新: CacheProfile 設定の次の変更により、最終的に出力キャッシュを Cookie ごとに変更することができました。
<outputCacheProfiles>
<add name="C1Page" duration="60" varyByCustom="C1Page" varyByParam="*" varyByHeader="Cookie" location="Server" />
</outputCacheProfiles>
この場合、メソッド GetVaryByCustomString は各リクエストでヒットしていますが、その必要はありません。これらの設定により、Web サイトに設定されている可能性のあるすべての Cookie によってキャッシュが異なります。もちろん、これは望ましい動作ではありません。そのため、調査を続けています。
さらに面白いことに、これら 2 つのパラメーター (varyByHeader="Cookie" と location="Server") は一緒にしか機能せず、そのうちの 1 つを無効にすると、以前とまったく同じように見えます - outputcache は変化しません。