我们有一堆页面可以获得非常高的流量,因此我们在web.config中有以下内容:
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="defaultCache" duration="900" varyByParam="*" location="Any"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
以及必要控制器方法的以下属性:
[OutputCache(CacheProfile = "defaultCache")]
这对我们很有帮助,因为提供给普通用户的缓存页面与管理员角色中的缓存页面之间没有交集。但是现在我们已经实现了CMS,如果用户以管理员角色登录,则CMS的接口将呈现在大多数页面中。但是,我们发现当前的缓存策略对我们不起作用,因为管理员内容正在缓存并提供给普通用户。
那么,有没有办法按角色缓存?这是否可能在页面的URL保持不变但内容根据登录角色更改的情况下?通过向所有相关页面添加诸如?admin = true之类的内容来更改URL会更好吗,这样我们的缓存配置文件中的varyByParam="*"
属性可以完成它的工作吗?
感谢。
答案 0 :(得分:3)
<add name="defaultCache" duration="900" varyByParam="*" varyByCustom="membership" location="Any"/>
的Global.asax:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "membership")
{
string membership = "";//Get membership.
return membership;
}
return string.Empty;
}