MVC3 @Context.User.Identity.Name empty value

本文关键字:empty value Name Identity @Context User MVC3 | 更新日期: 2023-09-27 18:23:55

当用户按下登录按钮时,控制器中执行以下功能,其中我使用SetAuthCookie:设置用户的名字

// POST: /Account/SignUp
    [HttpPost]
    public ActionResult Index(ConsumerView consumerData)
    {
        try
        {
            ConsumerManager consumerManagerObj = new ConsumerManager();
            if (consumerManagerObj.IsValidUser(consumerData.LoginID, consumerData.Password))
            {
                FormsAuthentication.SetAuthCookie(consumerData.FirstName, false);
                return View ("WelcomeConsumer");
            }
            else
            {
                ModelState.AddModelError("", "Invalid Username/Password!!");
            }
        }
        catch
        {
            return View(consumerData);
        }
        return View(consumerData);
    }

WelcomeConsumer视图具有代码:

@{
ViewBag.Title = "Home";
}
<h2>Welcome</h2>
<h2>Hi <b>@Context.User.Identity.Name</b></h2>
@Html.ActionLink("[Sign Out]", "SignOut", "ConsumerAccount")
<p>
<ul>
    <li>@Html.ActionLink("Book new Ticket", "NewBooking", "ConsumerAccount")</li>
    <li>@Html.ActionLink("View all Bookings", "ViewAllBookings", "ConsumerAccount")    </li>
</ul>
@ViewBag.NewBookingSuccess
</p>

但是@Context.User.Identity.Name总是有空值,有什么解决办法吗?

MVC3 @Context.User.Identity.Name empty value

User.Identity.Name是在AuthenticateRequest事件中设置的,该事件远早于调用控制器操作时设置的。调用FormsAuthentication.SetAuthCookieONLY会将身份验证cookie添加到响应中,但不会填充该值,这就是为什么该值为空的原因。

您将看到的是User.Identity.Name将在页面的下一个请求中填写。通常,在这样进行身份验证的页面上,您将从发送POST请求的操作重定向到需要身份验证的页。