使用OutputCacheAttribute时阻止缓存页面

时间:2010-11-09 21:53:02

标签: asp.net asp.net-mvc asp.net-mvc-2 caching outputcache

有没有办法阻止页面根据某些逻辑进行缓存?

我想缓存对页面的匿名访问,因此我可以设置VaryByCustom="user"并在Global.asax的GetVaryByCustomString方法中有一些魔力。好。但是,如果用户经过身份验证,我实际上并不想缓存该页面,只有在未经过身份验证的情况下才会这样。有没有办法指定这种东西?

我希望数据不被添加到缓存中(而不是添加一些随机密钥)的原因是,随着缓存增长,事情被抛出,我不希望未经过身份验证的版本被扔掉了。

2 个答案:

答案 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不能用作缓存中的密钥,因此我认为此页面不会被缓存。

但是我没有测试过这个!