Asp.net mvc 无效登录后,显示空引用异常
这是我的控制器代码:Asp.net mvc 无效登录后,显示空引用异常,asp.net-mvc,entity-framework,authentication,authorization,asp.net-identity,Asp.net Mvc,Entity Framework,Authentication,Authorization,Asp.net Identity,这是我的控制器代码: public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } var user = await UserManager.FindByEmailAsync(model.Em
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var user = await UserManager.FindByEmailAsync(model.Email);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
ViewBag.Email = user.Email;
return View("UnconfirmedAccount");
}
}
// Error is showing at this line System.nullReferenceException
var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
为此:
var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);
我只想显示无效的登录尝试消息,因为它是显示之前,而不是这个黄色屏幕。怎么做 简单,
从UserManager中找到用户后,您将检查user
是否为null
var user = await UserManager.FindByEmailAsync(model.Email);
if (user != null)
{
....
}
同样,您在该检查之外使用用户对象
var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);
因此,
user
为null,当您试图访问user.UserName时,它会抛出null引用异常 您可以显示您的登录视图模型吗?该检查用于检查帐户是否已确认,如果未确认,则代码将再次发送到他/她的电子邮件id,以限制用户在没有任何电子邮件id的情况下登录。现在,在我的情况下,用户为空,因此它应该点击最后一个案例,并向用户显示消息“无效登录尝试”。if(user!=null)
将检查用户对象是否为空。如果user为null,则您正试图访问user.UserName
,如切换前的应答所示,这将引发异常。
var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);