почему user.Identity.Name пусто после входа в систему?Asp.net MVC 2.0 - PullRequest
3 голосов
/ 28 сентября 2010

Я пишу приложение asp.net MVC 2.0, и мне нужно получить имя пользователя после входа в систему и передать его другой функции. Я попробовал это, просто изменив стандартный метод LogOn для AccountController, вот мой код:

[HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.UserName, model.Password))
            {

                FormsService.SignIn(model.UserName, model.RememberMe);
                using (ShopController newCtrl = new ShopController())
                {
                    if (Session["TempCart"] != null)
                    {

                        newCtrl.CreateShoppingCartFromSession((Cart)Session["TempCart"], User.Identity.Name);
                    }
                }
                if (!String.IsNullOrEmpty(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

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

Проблема в том, что, несмотря на то, что пользователь успешно вошел в систему, "User.Identity.Name" пусто, и я не знаю, почему ...

Любая помощь будет высоко ценится.

1 Ответ

6 голосов
/ 28 сентября 2010

Методы проверки подлинности с помощью форм устанавливают файл cookie для проверки подлинности, который читается и обрабатывается в первый раз при следующем запросе, поэтому User.Identity становится доступным только из следующего запроса.

В этом методе у вас будет либосначала сделать редирект или использовать model.UserName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...