我正在使用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"不能用作泛型类型或方法"UserManager"。没有隐含的从"TUser"到的引用转换"微软。AspNet。身份IUser’。
在此处输入图像描述
传递给UserManager的泛型类型需要实现接口IUser<TKey>
,其中TKey是用户的密钥类型,可以是字符串、int等。
因此,假设您的用户密钥类型(TKey(是字符串,请将ValidateAsync的合约更改为:
Task<IdentityResult> ValidateAsync<TUser>(UserManager<TUser> manager, TUser user)
where TUser : class, IUser<string>;
有关更多详细信息,请参阅文档:https://learn.microsoft.com/en-us/previous-versions/aspnet/dn468199(v=vs.108
试试看,让我知道它是否有效。
Muhammad,也许您使用的Nuget包有问题?。。。
我试图重现你的错误,但一切都很好!我在一个使用Asp的项目中测试了你的代码。Net Core 2.2,在另一个中使用Asp。Net Core 3.0/3.1。
对于Asp中的项目。Net Core 2.2,我安装了Nuget软件包Microsoft。AspNet。身份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 Package for Identity。