我正在使用AspnetIdentity进行其他验证,但无法正常工作给我这个错误。这是我的界面代码。
using Health.BLL.CustomModels.UserModels;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Health.BLL.AuthRepository
{
public interface IAuthRepository
{
Task<IdentityResult> RegisterUser(UserModel userModel);
Task<IdentityUser> FindUser(string userName, string password);
Task<IList<string>> GetRolesAsync(string userid);
Task<IdentityResult> ValidateAsync<TUser>(UserManager<TUser> manager, TUser user) where TUser : class;
}
}
有关错误参考,请参见下图。
类型“ TUser”不能用作类型参数“ TUser”中的 通用类型或方法'UserManager'。没有隐含 从“ TUser”到 “ Microsoft.AspNet.Identity.IUser”。
答案 0 :(得分:1)
传递给UserManager的通用类型需要实现接口IUser<TKey>
,其中TKey是用户的密钥类型,可以是字符串,整数等。
因此,假设您的用户密钥类型(TKey)为字符串,请将ValidateAsync的协定更改为:
Task<IdentityResult> ValidateAsync<TUser>(UserManager<TUser> manager, TUser user)
where TUser : class, IUser<string>;
有关更多详细信息,请参阅文档:https://docs.microsoft.com/en-us/previous-versions/aspnet/dn468199(v=vs.108
尝试一下,让我知道它是否有效。
答案 1 :(得分:0)
穆罕默德,也许您使用的Nuget软件包有问题?...
我试图重现您的错误,但一切正常!我在使用Asp.Net Core 2.2的项目中以及使用Asp.Net Core 3.0 / 3.1的另一个项目中测试了您的代码。
对于Asp.Net Core 2.2中的项目,我安装了Nuget包Microsoft.AspNet.Identity.EntityFrameworkCore版本2.2.3。
对于Asp.Net Core 3.0 / 3.1中的项目,我安装了相同的Nuget软件包,但版本为3.1.3。
还有我用来测试的代码:
using Microsoft.AspNetCore.Identity;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace WebApplication1
{
public interface IAuthRepository
{
Task<IdentityUser> FindUser(string userName, string password);
Task<IList<string>> GetRolesAsync(string userid);
Task<IdentityResult> ValidateAsync<TUser>(UserManager<TUser> manager, TUser user) where TUser : class;
}
}
也许您应该使用项目中使用的Asp.Net Framework的版本以及所使用的Nuget Identity包来编辑问题。