我在ASP.NET MVC 3 Web应用程序项目中使用ASP.NET Membership。
我使用Aspnet_regsql.exe
安装了ASP.NET Membership表,现在我的主userTable
有一个名为“userID”的foriegn键,它指向aspnet_Users的“UserId”。
这个“userTable”连接到许多表。因此,对于现在的每个操作,我都需要使用用户登录的用户名从aspnet_User获取“UserId”。
为此,我使用
MembershipUser user = Membership.Provider.GetUser(username, true);
现在,对于我必须进行此次调用的每项操作,并让user.ProviderUserKey
继续我的其他操作。
我认为必须有更好的方法来做到这一点。是否有任何内置方法可以做到这一点?
答案 0 :(得分:1)
ASP.NET成员资格提供程序并非旨在提供ProviderUserKey ...也许您可以使用用户名代替?您始终可以通过Context.User.Identity.Name轻松访问它。
答案 1 :(得分:0)
我总是使用:
Guid userId = (Guid)Membership.GetUser().ProviderUserKey;
答案 2 :(得分:0)
您获取一次用户信息并将其放入表单身份验证Cookie 并加密用户数据。
对于后续通话,您可以使用 Context.Identity 作为用户信息
答案 3 :(得分:0)
您可以在缓存中保留相关信息,例如在Dictionary<string, Guid>
中,其中键是用户名(可以使用HttpContext.Current.User.Identity.Name或Thread.CurrentPrincipal查找)。 Identity.Name),而ProviderUserKey是值。
按需构建此字典或初始化一次,并将其放入ASP.NET缓存,会话或应用程序中(当然,请注意我们的序列化和并发问题)。