ASP.NET MVC在创建用户时获取userId?

Ali*_*hşi 3 authentication asp.net-mvc userid user-registration

我想在注册时获得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);
    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

pju*_*ble 5

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

如果CookiesSupported为false,则SetAuthCookie方法会将表单身份验证票证添加到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;
            ...
Run Code Online (Sandbox Code Playgroud)