使用ASP.NET MVC OutputCache同时根据用户是否经过身份validation来更改View内容

我正在构建一个ASP.NET MVC 2站点,我正在大量使用OutputCache参数。 但是,我有一个问题:使用此类缓存可能会干扰身份validation

在我的所有页面上,我显示用户是否已登录。 此外,在我的一些视图中,我根据用户角色进行过滤,以确定是否显示某些页面内容(例如,我的某个页面上的“ 编辑”链接仅显示给主持人或管理员角色的用户) 。

使用OutputCache是​​否会干扰我的视图的动态更改? 如果是这样,我如何在不消除缓存的情况下解决此问题?

[OutputCache]和[Authorize]属性可以很好地相互配合。 AuthorizeAttribute.OnAuthorization()方法将挂钩设置到输出缓存系统中,该挂钩系统强制授权filter在从缓存提供页面之前重新运行。 如果授权filter逻辑失败,则将其视为高速缓存未命中。 如果授权逻辑成功,则将从缓存提供页面。 因此,如果您对某个操作有[授权(Roles =“主持人,管理员”)]和[OutputCache],则除非当前用户处于主持人或管理员角色,否则不会从缓存中提供该页面。

请注意,这不会因用户或角色而异; 它确实重新运行原始支票。 想象一下,用户A(谁是主持人)进来并导致页面被缓存。 现在,用户B(谁是管理员)进入并点击缓存页面。 由于允许管理员和主持人,[授权]检查将成功,并且提供给用户B的响应将包含与提供给用户A的响应完全相同的内容

请注意,响应替换在MVC 2中不起作用。如果您正在提供潜在的敏感数据,那么最好的选择是不要缓存它。 如果您绝对需要缓存,则可以使用AJAX回调来动态填充缺失的数据,从而模仿类似于响应替换的内容。

我相信你需要的是ASP.NET donunt缓存。 请看这里有一个很好的解释。 如果SO在顶部酒吧区使用类似的东西,我不会感到惊讶。