3

登録時に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 を取得するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

5

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;
            ...
于 2012-04-21T11:43:32.777 に答える