用户管理器的异步方法给出"Incorrect number of arguments for call to method Boolean Equals"



我已经自定义了User和UserStore类。
现在我正在尝试注册或登录用户,但我得到错误

'调用布尔方法时提供的参数数量不正确=(系统。字符串,系统。字符串,System.StringComparison)

错误在第411行:

Line 409:       }
Line 410:       var user = new User() { UserName = model.Email, Email = model.Email };
--> Line 411:      IdentityResult result = await UserManager.CreateAsync(user);
Line 412:       if (result.Succeeded)
Line 413:       {

上也会出现同样的错误
UserManager.FindAsync(user), UserManager.CreateAsync(user,password)

现在错误发生时,我登录与外部登录,如谷歌,它也使用UserManager的方法。输入电子邮件也可以,但是当必须使用插入的电子邮件从外部登录创建用户时,它也会给出CreateAsync错误。


编辑UserManager.Create(User user)也出现错误


这可能是因为UserManager中的方法对用户对象的id执行了Equal操作,而它期望的是字符串,而我的是int类型。但是因为我不能在UserManager中获得堆栈跟踪,而且我不知道如何在UserManager中重写这个方法,我不知道如何解决这个问题?

我该如何解决这个问题?我需要创建自己的UserManager吗?还是我需要另一种解决方案?

我的userstore代码:

public class UserStore :
IUserStore<User>,
IUserPasswordStore<User>,
IUserSecurityStampStore<User>,
IUserEmailStore<User>,
IUserLoginStore<User>
{
    private readonly NFCMSDbContext _db;
    public UserStore(NFCMSDbContext db)
    {
        _db = db;
    }
    public UserStore()
    {
        _db = new NFCMSDbContext();
    }
    #region IUserStore
    public Task CreateAsync(User user)
    {
        if (user == null)
            throw new ArgumentNullException("user");
        _db.Users.Add(user);
        _db.Configuration.ValidateOnSaveEnabled = false;
        return _db.SaveChangesAsync();
    }
    public Task DeleteAsync(User user)
    {
        if (user == null)
            throw new ArgumentNullException("user");
        _db.Users.Remove(user);
        _db.Configuration.ValidateOnSaveEnabled = false;
        return _db.SaveChangesAsync();
    }
    public Task<User> FindByIdAsync(string userId)
    {
        int userid;
        if(int.TryParse(userId,out userid))
            throw new ArgumentNullException("userId");
        return _db.Users.Where(u => u.UserId == userid).FirstOrDefaultAsync();
    }
(...)

User.cs:

public sealed class User : IUser<int>
{
    public User()
    {
        UserLogins = new List<UserLogin>();
    }
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string PasswordHash { get; set; }
    public string SecurityStamp { get; set; }
    public string Email {get; set; }
    public bool IsEmailConfirmed { get; set; }
    int IUser<int>.Id
    {
        get { return UserId; }
    }
    public ICollection<UserLogin> UserLogins { get; private set; }
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}

您是否将UserManager类型更改为UserManager以告诉它您的用户密钥现在是int而不是字符串?

相关内容

  • 没有找到相关文章

最新更新