【问题标题】:ASP.NET MVC get userId when creating user?ASP.NET MVC 在创建用户时获取 userId?
【发布时间】:2023-04-01 14:43:01
【问题描述】:

我想在注册的时候获取UserId

[AllowAnonymous]
    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, passwordQuestion: null, passwordAnswer: null, isApproved: true, providerUserKey: null, status: out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);
                //Object reference not set to an instance of an object.
                Guid id = (Guid)System.Web.Security.Membership.GetUser().ProviderUserKey;
                System.Web.Security.Roles.AddUserToRole(model.UserName, "User");
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

但发生错误(“对象引用未设置为对象的实例。”)。如何在 register 方法中获取 userId?

谢谢。

【问题讨论】:

  • 什么时候得到异常?
  • 我用评论行标记了它。
  • 在“FormsAuthentication.SetAuthCookie...”之后

标签: asp.net-mvc authentication user-registration userid


【解决方案1】:

FormsAuthentication.SetAuthCookie 验证下一个 请求,System.Web.Security.Membership.GetUser() 在同一个请求上将返回 null:

SetAuthCookie 方法将表单身份验证票添加到任一 如果 CookiesSupported 为 false,则为 cookie 集合或 URL。这 表格-身份验证票供应表格-身份验证信息 到浏览器发出的下一个请求。使用表单身份验证, 您可以在要验证身份时使用 SetAuthCookie 方法 用户,但仍然通过重定向保留对导航的控制权。

Membership.CreateUser 返回创建的用户,所以你应该可以这样做:

[AllowAnonymous]
[HttpPost]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        MembershipCreateStatus createStatus;
        MembershipUser membershipUser = Membership.CreateUser(model.UserName, model.Password, model.Email, passwordQuestion: null, passwordAnswer: null, isApproved: true, providerUserKey: null, status: out createStatus);

        if (createStatus == MembershipCreateStatus.Success)
        {
            FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);
            Guid id = (Guid)membershipUser.ProviderUserKey;
            ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多