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不会缓存,尽管结果(cache1cache2)是相同的并且页面应该被缓存。

跟进 我发现了正在发送Type=3,或者其他任何东西,1并且2确实根据需要缓存了页面。Page_Load作用于价值观1& 2——有什么联系吗?

4

1 回答 1

0

这个问题的答案似乎解释了很多。解决方法是一个单独的问题。

于 2012-12-12T19:39:57.410 回答