0

ページでカスタム キャッシュを使用しており、キャッシュされたバージョンを追跡するためにタイムスタンプを残しています。

私は持っている

<%@ OutputCache Duration="1200" VaryByParam="None" VaryByCustom="myCache" Location="ServerAndClient" %>

ページ上にあり、Global.asax のコード ビハインドには (簡略化された)

Public Overrides Function GetVaryByCustomString(context As HttpContext, arg As String) As String
If (arg = "myCache") Then
   If context.Request.QueryString("Type").ToString() = "1" Then Return "cache-1"
   If context.Request.QueryString("Type").ToString() = "2" Then Return "cache-2"
   If context.Request.Cookies("Type").Value = "1" Then Return "cache-1"
   Return "cache-2"
End If

cache-2クエリ文字列リクエストが行われておらず、Cookie がそれ以外のことを言っていない場合のデフォルト状態です。ページは の値で Cookie を保存しますType

?Type=1いずれかでページを呼び出すか?Type=2、ページがキャッシュに保存されていない場合、タイムスタンプが変更されるたびに更新されます。

パラメータを使用せずにページを呼び出すと、キャッシュが保存され、Typeパラメータを使用してページを呼び出すと存在することがわかりました。

説明はありますか?さらに、Global.asax では、Responseオブジェクトまたはファイル システムにアクセスして、何が起きているかをログに記録できませんでした。方法はありますか?

アップデート

たとえば、 を呼び出すと<url>?Type=1<url>の次の呼び出しにはキャッシュが返されますが<url>?Type=1、 には同じキャッシュが返され<url>?Type=2ます。

アップデート

私は今持っていReturn "cache" & context.Request.QueryString("Type")ます。Typeクエリ文字列なしでリクエストを送信するとキャッシュされたバージョンのページが返されますが、送信はキャッシュされTypeませんが、結果 (cache1またはcache2) は同じであり、ページがキャッシュされるはずです。

フォローアップType=3、またはそれ以外のもの1を 送信していることがわかり、2必要に応じてページをキャッシュします。Page_Load値に作用します1& 2- 何か関係があるのでしょうか?

4

1 に答える 1

0

この質問への回答は多くを説明しているようです。回避策は別の質問です。

于 2012-12-12T19:39:57.410 に答える