【问题标题】:Avoid Multiple calls to GetUser when using ASP.NET Membership使用 ASP.NET Membership 时避免多次调用 GetUser
【发布时间】:2012-09-05 02:46:29
【问题描述】:

我在 ASP.NET MVC 3 Web 应用程序项目中使用 ASP.NET Membership。

我已经使用 Aspnet_regsql.exe 安装了 ASP.NET 成员表,现在我的主 userTable 有一个名为“userID”的外键,它指向 aspnet_Users 的“UserId”。

这个“userTable”连接到许多表。因此,现在对于每个操作,我都需要使用用户登录的用户名从 aspnet_User 获取“UserId”。

为此我使用

 MembershipUser user = Membership.Provider.GetUser(username, true);

现在对于每一项操作,我都必须拨打此电话并获得 user.ProviderUserKey 以继续我的其他操作。

我认为必须有更好的方法来做到这一点。有没有内置的方法来做到这一点?

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-membership membership-provider


    【解决方案1】:

    您可以将相关信息保留在缓存中,例如在Dictionary<string, Guid> 中,其中键是用户名(您可以使用 HttpContext.Current.User.Identity.Name 或 Thread.CurrentPrincipal.Identity 进行查找。 Name), ProviderUserKey 是值。

    按需构建此字典或将其初始化一次,然后将其放入 ASP.NET 缓存、会话或应用程序中(当然注意我们的序列化和并发问题)。

    【讨论】:

      【解决方案2】:

      您获取一次用户信息,并将其放入 forms authentication cookie 中,并加密用户数据。

      对于后续调用,您使用 Context.Identity 作为用户信息

      【讨论】:

        【解决方案3】:

        我总是用:

        Guid userId = (Guid)Membership.GetUser().ProviderUserKey;
        

        【讨论】:

        • 向数据库发送多个调用对吗?这正是我想要避免的。
        • 你可以将provideruserkey保存在cookie中。
        【解决方案4】:

        ASP.NET Membership Provider 不打算提供 ProviderUserKey...也许您可以改用用户名?您始终可以通过 Context.User.Identity.Name 轻松访问它。

        【讨论】:

          猜你喜欢
          • 2018-10-31
          • 1970-01-01
          • 1970-01-01
          • 2021-10-16
          • 1970-01-01
          • 1970-01-01
          • 2020-05-09
          • 2022-08-09
          • 2019-10-31
          相关资源
          最近更新 更多