【问题标题】:Get UserId (int) in new MVC4 application在新的 MVC4 应用程序中获取 UserId (int)
【发布时间】:2013-03-02 22:59:38
【问题描述】:

新的 MVC4 应用程序创建了 UserProfile 表:

用户 ID(int) |用户名(nvarchar)

在控制器中:

  string currentUser = User.Identity.Name;  // returns UserName

  var mu1 = Membership.GetUser(); // returns null

  var mu2 = Membership.GetUser(currentUser); // returns null as well

我阅读了很多帖子,他们都在谈论获得 Guid,而我什至在用户和会员表中都没有。

有没有办法获取当前登录用户的 UserId (int)?

【问题讨论】:

  • 为什么需要 id?
  • @andri,将广告 FK 存储在另一个表中。
  • 为什么不使用用户名作为 FK?用户名是唯一的,不是吗?
  • @andri 您在以这种方式使用用户名时应该小心,因为您可能会遇到用户删除或更改其名称,然后另一个用户使用相同的用户名注册的情况......可能麻烦了!

标签: asp.net asp.net-mvc-4 membership


【解决方案1】:

确保将[InitializeSimpleMembership] 添加到控制器顶部,以便它通过Filters 目录中的文件InitializeSimpleMembershipAttribute.cs 初始化简单成员资格。

然后您可以通过几种不同的方式访问用户 ID:

int mu1 = (int)WebSecurity.CurrentUserId;
int mu2 = (int)Membership.GetUser().ProviderUserKey;

【讨论】:

  • 我的 InitializeSimpleMembershipAttribute 位于 Filters\InitializeSimpleMembershipAttribute 中,所以我在控制器顶部添加了using RecreationalServicesTicketingSystem.Filters;,但我的 int mu1 = (int)WebSecurity.CurrentUserId; 给了我The name 'Websecurity' does not exist in the current context. So I used using WebMatrix.WebData;`这仍然有效吗?
【解决方案2】:

您可以使用 int 获取 UserId

WebSecurity.GetUserId(User.Identity.Name);

其他信息:如果您使用 AccountController 以外的其他控制器,则应在控制器类顶部添加 [InitializeSimpleMembership]

【讨论】:

    【解决方案3】:

    mu1mu2 将包含MembershipUser 的实例,如果用户已成功通过身份验证。 MembershipUser 有一个 ProviderUserKey 类型的 object 属性,它将包含用户的标识符。

    Membership.GetUser() 需要为应用程序连接 MembershipProvider 并为用户进行身份验证;由于您看到 null 返回,这表明上述条件之一不满足。

    【讨论】:

      【解决方案4】:

      你可以得到UserId

      if (Request.IsAuthenticated)
       {
        var membership = (SimpleMembershipProvider)Membership.Provider; 
        int idUser = membership.GetUserId(User.Identity.Name);
       }
      

      【讨论】:

        猜你喜欢
        • 2012-11-05
        • 2012-08-22
        • 2013-07-12
        • 2013-10-18
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        相关资源
        最近更新 更多