Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无效登录后,显示空引用异常_Asp.net Mvc_Entity Framework_Authentication_Authorization_Asp.net Identity - Fatal编程技术网

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);