加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在ASP.NET中每个请求静态数据

发布时间:2020-12-15 06:55:48 所属栏目:百科 来源:网络整理
导读:我想缓存一个用户对每个请求的角色.在任何给定的页面中,有几个地方我们有以下类型的东西: % if(Roles.IsUserInRole("RoleName")) {% !-- Conditional Rendering --% } else if(Roles.IsUserInRole("AnotherRole") {% !-- You get the point --% } % 由于这
我想缓存一个用户对每个请求的角色.在任何给定的页面中,有几个地方我们有以下类型的东西:
<% if(Roles.IsUserInRole("RoleName")) {%>
    <!-- Conditional Rendering -->
<% } else if(Roles.IsUserInRole("AnotherRole") {%>
    <!-- You get the point -->
<% } %>

由于这都存储在sql数据库中,所以这些请求中的每一个都会触发数据库.我知道有一些方法来缓存一个cookie中的角色,但是我不想这样做.无论如何,我在想什么是这样的.

public static class SecurityUtils
    {
        public static string[] UserRoles()
        {
            var context = HttpContext.Current;

            if (context == null) return Enumerable.Empty<string>();

            string[] roles;

            roles = context.Items["UserRoles"] as string[];

            if (roles == null)
            {
                roles = Roles.GetRolesForUser();
                context.Items["UserRoles"] = roles;
            }

            return roles;
        }
    }

有人看到这个问题吗?我知道曾经调用过UserRoles()会在上下文中查找该项目,也许这不是最有效的方法.我真正想知道的是,如果这将按照每个请求缓存它,所以与其他用户请求没有重叠.

解决方法

这看起来很安全,快速浏览. HttpContent.Current.Items是一个每HTTP请求缓存.考虑进一步减少数据库调用的另一个选择是使用会话状态.

考虑一个场景,你有一个页面有很多ajax的东西.每个ajax请求将调用一个数据库调用来加载安全角色,因为它们都是单独的HTTP请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读