0

我正在设计一个 ASP.net MVC4 应用程序,我需要获取当前用户 ID,以便将其作为组的所有者 ID 保存在数据库的表中。

这是我正在使用的代码:

public ActionResult CreateGroup(string groupName, string description)
{
       if (Request.IsAuthenticated)
       {
           Group group = new Group();
           Random random = new Random();
           int groupId = random.Next(1, 2147483647);

           using (CodeShareEntities conn = new CodeShareEntities())
           {
               try
               {
                        int ownerId = (int) Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name).ProviderUserKey;

                        group.GroupId = groupId;
                        group.GroupName = groupName;
                        group.Description = description;
                        group.OwnerId = ownerId;

                        conn.Group.Add(group);
                        conn.SaveChanges();
                    }
                    catch (Exception e)
                    {
                        ModelState.AddModelError("", e.Message);
                    }
                }

                return View("ThisGroup");
          }
          else 
          {
          return View("../Shared/NotLoggedIn");
  }

我在这一行收到 NullReferenceException:

int ownerId = (int) Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name).ProviderUserKey;

尽管用户名返回正确。可能是什么问题?我还是 Web 应用程序的新手,我真的不明白这一点!

谢谢

4

3 回答 3

0

除非您使用自定义会员提供程序,否则我相信 ProvidersUserKey 是一个 Guid。

(Guid) Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name).ProviderUserKey;
于 2013-05-02T19:00:48.187 回答
0

试试这个代码。如果你使用 aspnet 会员提供程序,它就可以工作。

MembershipUser user = Membership.GetUser(HttpContext.User.Identity.Name);
    Guid guid = (Guid)user.ProviderUserKey;
于 2013-05-02T19:33:20.413 回答
0

这是检索当前登录用户 ID 的辅助方法。

请注意,ASP.Net Membership 使用 Guid 作为 ID(而不是整数)。

public static Guid? UserId
{
    get
    {
        try
        {
            Guid? userId = null;
            if (HttpContext.Current != null &&  
               HttpContext.Current.User.Identity.IsAuthenticated)
            {
                MembershipUser currentUser = Membership.GetUser();
                userId = (Guid)currentUser.ProviderUserKey;
            }
            return userId;
        }
        catch
        {
            return null;
        }
    }
}

注意:您要检查返回UserId的 is notnullgroup.OwnerIdis Guidtoo;否则,您的保存语句将失败。

于 2013-05-03T14:58:38.793 回答