有没有办法阻止页面根据某些逻辑进行缓存?
我想缓存对页面的匿名访问,因此我可以设置VaryByCustom="user"
并在Global.asax的GetVaryByCustomString
方法中有一些魔力。好。但是,如果用户经过身份验证,我实际上并不想缓存该页面,只有在未经过身份验证的情况下才会这样。有没有办法指定这种东西?
我希望数据不被添加到缓存中(而不是添加一些随机密钥)的原因是,随着缓存增长,事情被抛出,我不希望未经过身份验证的版本被扔掉了。
答案 0 :(得分:0)
您可以在asp.net Web表单的页面加载中以编程方式执行此操作。
bool isAuthenticated = /*variable assignment*/;
if (isAuthenticated){
Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
如果你想在某个单独的方法中使用这个逻辑,你可以像这样注册一个回调。
Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(MethodWhichSetsCacheability), null);
在MVC中,您应该能够在控制器中执行上述代码
答案 1 :(得分:-1)
您可以检查用户是否在GetVaryByCustomString中进行了身份验证。
context.Request.IsAuthenticated
如果为true则返回null。如果没有返回固定的字符串。
GetVaryByCustomString的基本实现返回null,因此这应该是安全的。但由于null不能用作缓存中的密钥,因此我认为此页面不会被缓存。
但是我没有测试过这个!