我在页面上使用自定义缓存,留下时间戳以跟随缓存版本。
我有
<%@ 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
——有什么联系吗?