我的代码很简单:
[HttpGet]
public ActionResult Login ()
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Home");
}
return View(new LoginModel());
}
[HttpPost]
public ActionReslt Login (LoginModel model)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.Email, model.Password))
{
FormsAuthentication.SetAuthCookie(model.Email, false);
return RedirectToAction("Index","Home");
}
}
return View(model);
}
但我的日志服务有时会收到此错误! System.NullReferenceException: Object reference not set to an instance of an object
我认为对每个引用执行null检查的最佳做法如下:
if (User!=null && User.Identity!=null && User.Identity.IsAuthenticated)
你能告诉我为什么有时候它是空的吗?有时候不是吗? 它的最佳实践是什么?
答案 0 :(得分:3)
您应该使用Request.IsAuthenticated而不是User.Identity.IsAuthenticated
Page.User.Identity.IsAuthenticated returns object reference not set to instance of object
内部Request.IsAuthenticated将验证用户及其 设置标识(非空)。您可以在代码中执行相同操作,但是 为什么这么麻烦。
调用这些方法时会设置User.Identity.IsAuthenticated:
FormsAuthentication.Authenticate(name, pwd)
或者
Membership.ValidateUser(name, pwd)
或其他设置Cookie的身份验证机制方法