使用aspnet身份进行的其他验证

时间:2020-05-11 20:22:34

标签: c# asp.net-identity

我正在使用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”。

enter image description here

2 个答案:

答案 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包来编辑问题。

相关问题