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
总是有空值,有什么解决办法吗?
User.Identity.Name是在AuthenticateRequest
事件中设置的,该事件远早于调用控制器操作时设置的。调用FormsAuthentication.SetAuthCookie
ONLY会将身份验证cookie添加到响应中,但不会填充该值,这就是为什么该值为空的原因。
您将看到的是User.Identity.Name
将在页面的下一个请求中填写。通常,在这样进行身份验证的页面上,您将从发送POST
请求的操作重定向到需要身份验证的页。