gpt4 book ai didi

c# - 使用 ASP.NET MVC OutputCache,同时根据用户是否经过身份验证改变 View 内容

转载 作者:太空狗 更新时间:2023-10-29 22:34:50 25 4
gpt4 key购买 nike

我正在构建一个 ASP.NET MVC 2 站点,我在其中大量使用了 OutputCache 参数。但是,我担心:使用这样的缓存可能会干扰身份验证

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

使用 OutputCache 是否会干扰我的 View 的这种动态变化?如果是这样,我如何在不消除缓存的情况下解决这个问题?

最佳答案

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

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

请注意,响应替换在 MVC 2 中不起作用。如果您正在提供可能敏感的数据,最好不要缓存它。如果您绝对需要缓存,您可以通过使用 AJAX 回调动态填充缺失数据来模拟类似于响应替换的东西。

关于c# - 使用 ASP.NET MVC OutputCache,同时根据用户是否经过身份验证改变 View 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com