1

当用户按下登录按钮时,控制器中的以下功能将执行,其中我使用以下方法设置用户的名字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它总是有空值。有什么解决办法吗?

4

1 回答 1

1

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

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

于 2013-07-19T21:12:42.603 回答