如果在ASP.NET核心MVC中找不到用户,则使用电子邮件或用户名登录的用户将返回null

如果在ASP.NET核心MVC中找不到用户,则使用电子邮件或用户名登录的用户将返回null,asp.net,asp.net-core,asp.net-core-mvc,asp.net-identity,asp.net-core-3.1,Asp.net,Asp.net Core,Asp.net Core Mvc,Asp.net Identity,Asp.net Core 3.1,我使用的是经过一些修改的默认标识页,在登录页面中我包含了用户登录的用户名。它工作得很好,用户现在可以通过电子邮件和用户名登录,但是当用户输入错误信息时,会出现一个空异常,而不是显示 无效的登录尝试 代码: 我知道错误发生的原因,但不知道正确的解决方法是什么 最初,signInManager检查的是用户输入,而不是实际用户,因此如果没有找到输入,它将不会成功,我该如何以相同的方式执行 当用户输入错误信息时,会出现空异常 在的源代码中,我们可以发现,如果用户为null,它将抛出NullExcepti

我使用的是经过一些修改的默认标识页,在登录页面中我包含了用户登录的用户名。它工作得很好,用户现在可以通过电子邮件和用户名登录,但是当用户输入错误信息时,会出现一个空异常,而不是显示

无效的登录尝试

代码:

我知道错误发生的原因,但不知道正确的解决方法是什么

最初,
signInManager
检查的是用户输入,而不是实际用户,因此如果没有找到输入,它将不会成功,我该如何以相同的方式执行

当用户输入错误信息时,会出现空异常

在的源代码中,我们可以发现,如果用户为null,它将抛出NullException错误

public virtual async Task<SignInResult> PasswordSignInAsync(TUser user, string password,
            bool isPersistent, bool lockoutOnFailure)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            var attempt = await CheckPasswordSignInAsync(user, password, lockoutOnFailure);
            return attempt.Succeeded
                ? await SignInOrTwoFactorAsync(user, isPersistent)
                : attempt;
        }

哦,这很简单!非常感谢你。
public virtual async Task<SignInResult> PasswordSignInAsync(TUser user, string password,
            bool isPersistent, bool lockoutOnFailure)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            var attempt = await CheckPasswordSignInAsync(user, password, lockoutOnFailure);
            return attempt.Succeeded
                ? await SignInOrTwoFactorAsync(user, isPersistent)
                : attempt;
        }
var user = await _userManager.FindByNameAsync(Input.Email) ?? await _userManager.FindByEmailAsync(Input.Email);

if (user == null)
{
    ModelState.AddModelError(string.Empty, "Invalid login attempt.");
    return Page();
}

var result = await _signInManager.PasswordSignInAsync(user, Input.Password, Input.RememberMe, lockoutOnFailure: true);

//...
//code logic here