2012-04-21 101 views
3

我想獲得用戶ID註冊時ASP.NET MVC創建用戶時獲取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); 
    } 

但出現錯誤(「不設置到對象的實例對象引用」)。我如何獲得註冊方法中的userId?

謝謝。

+0

你什麼時候得到的異常? – Xharze 2012-04-21 11:25:22

+0

我用註釋行標記了它。 – 2012-04-21 11:33:32

+0

After「FormsAuthentication.SetAuthCookie ...」 – 2012-04-21 11:34:38

回答

5

FormsAuthentication.SetAuthCookie認證下一個要求,System.Web.Security.Membership.GetUser()在相同的請求將返回null:

的SetAuthCookie方法增加了一個表單的身份驗證票證要麼 Cookies集合或網址,如果CookiesSupported是假的。 表單認證票據提供表單認證信息 給瀏覽器的下一個請求。通過表單身份驗證, 您可以在想要驗證 用戶身份時使用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; 
      ... 
+0

謝謝你的偉大答案。 – 2012-04-21 11:50:29