我有一个使用 JQuery 显示许多图表和表格的应用程序。其中一些图表基于会话中保存的变量(例如,用户在另一个页面中添加了一个值,而在下一页我正在生成一个图表,因此用户请求不发送任何参数)
我在网上环顾四周,大多数解决方案都基于
[OutputCache(Duration=60, VaryByParam="someParm")]
问题是我的大部分请求都不发送参数,它们只是使用会话中的值。
有没有办法为这些类型的请求启用缓存?
编辑:我们有一个复杂的安全要求,我们不能使用 MVC 的默认授权属性。我们必须根据当前用户 + 发送给动作的参数来编写逻辑,因此动作内部的方法决定要么继续请求,要么不返回任何内容。这使得缓存变得非常困难,因为在执行 OutputCache 时我们只有参数,但上下文中的标识对象是空的。结果,如果一个具有管理员权限的用户发送一个请求 a 和 b,然后一个具有最低权限的用户发送请求 a 和 b,第二个人将看到结果,因为操作没有运行,但是值来自缓存被使用!
为了解决这个问题,我使用了 getvarybyCustome。这个函数所做的只是返回用户的组名,这有助于创建一个更复杂的密钥。上一个示例中具有最低权限的人将具有与管理员的请求缓存键 (a,b,group_admin) 不同的缓存键 (a,b,group_less)。但是,为每个请求获取组名也很昂贵,因此我使用 Cache 对象来缓存用户组,因此在会话开始时,会从 AD 查询用户组并保存到缓存中,因此对于他/她以后的请求,他的组名是从缓存中检索的。