当用户按下登录按钮时,执行控制器中的以下功能,我使用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
总是有空值。任何解决方案?
答案 0 :(得分:1)
User.Identity.Name在AuthenticateRequest
事件中设置,该事件远早于调用控制器操作时的事件。只调用FormsAuthentication.SetAuthCookie
会将身份验证Cookie添加到响应中,但不会填充该值,这就是为空的原因。
看到的是User.Identity.Name
将在下一次页面请求时填写。通常在正在进行此类身份验证的页面上,您将从发送POST
请求的操作重定向到需要身份验证的页面。