我在页面上使用自定义缓存,留下时间戳来跟踪缓存版本。
我有
<%@ 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没有说明的默认状态。该页面会保存值为Type
的Cookie。
当我使用?Type=1
或?Type=2
调用页面时,页面不会保存到缓存中 - 每次都会刷新时间戳更改。
我发现,如果我在没有的情况下调用页面,则会保存Type
参数缓存,然后在我使用参数调用页面时也存在。
有解释吗?而且 - 在Global.asax中,我无法访问Response
对象或文件系统来记录正在发生的事情。有办法吗?
更新
e.g。调用<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
&amp; 2
- 可以有任何联系吗?