使用ASP.NET成员资格时避免多次调用GetUser

时间:2012-09-12 06:09:08

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

我在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继续我的其他操作。

我认为必须有更好的方法来做到这一点。是否有任何内置方法可以做到这一点?

4 个答案:

答案 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缓存,会话或应用程序中(当然,请注意我们的序列化和并发问题)。