自定义缓存不缓存查询字符串

时间:2012-12-06 11:11:31

标签: asp.net caching query-string global-asax outputcache

我在页面上使用自定义缓存,留下时间戳来跟踪缓存版本。

我有

<%@ 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不会缓存,但结果(cache1cache2)是相同的和页面应该被缓存。

跟进 我发现发送Type=3,或1以外的任何内容,2会根据需要缓存页面。 Page_Load1&amp; 2 - 可以有任何联系吗?

1 个答案:

答案 0 :(得分:0)

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