Asp.Net @OuputCache VarByCustom不保留1页的2个版本的缓存

时间:2016-08-24 22:12:36

标签: c# asp.net outputcache

.apsx

中使用的输出指令
<%@ OutputCache duration="60" VaryByParam="None" Location="Server" VaryByCustom="ListingPageCookieCache"%>

global.asax.cs中的覆盖

public override string GetVaryByCustomString(HttpContext context, string arg)
    {
        if (arg == "ListingPageCookieCache")
        {                
            if (condition)//pseudo coded                    
                   return "ListingPageCookieCache" + "us";                   
               else 
                    return "ListingPageCookieCache" + "ca";
        }
        return base.GetVaryByCustomString(context, arg);
    }

我的问题/ 解释给您:

  • 为什么我们只能缓存2个可能的输出中的1个? (一遍又一遍地加载ca缓存并检索输出正常。如果我要加载usca的缓存将丢失,但us会被缓存并检索很好,直到其他人再次请求ca。)
  • 如何缓存此页面的两个版本 - 无需将位置更改为ServerAndClient

@Kenneth - 更新

例如,当我将其写入global.asax文件

if (arg == "ListingPageCookieCache")
        {
            var page = context.CurrentHandler as ShowListing;
            if (page?.sub != null)
            {
                return "ListingPageCookieCache_" + page.sub.Type.ToString();
            }
        }

然后没有任何缓存 - 但不是因为字符串没有设置....

如果我改变上面的内容以使用context.PreviousHandler,它会在页面第一次出现时进行缓存 - 但是当其他请求发生订阅更改时则不会,所以如果首先加载US,则加载US CA类型子。

0 个答案:

没有答案