我正在使用ASP.NET Core MVC 3.0 API项目。我正在使用Microsoft.AspNetCore.Identity
v3.0
在Startup.cs
,里面的ConfigureServices
方法,当我输入下面并运行应用程序,我得到一个异常:
var builder = services.AddIdentityCore<AppUser>();
var identityBuilder = new IdentityBuilder(builder.UserType, builder.Services);
identityBuilder.AddEntityFrameworkStores<DataContext>();
identityBuilder.AddSignInManager<SignInManager<AppUser>>();
该AppUser
班是这样的:
using Microsoft.AspNetCore.Identity;
namespace Domain
{
public class AppUser : IdentityUser
{
public string DisplayName { get; set; }
}
}
我得到的例外是:
未处理的异常。System.AggregateException:某些服务无法构造(验证服务描述符“ ServiceType:Microsoft.AspNetCore.Identity.ISecurityStampValidator的生命周期:范围实现类型:Microsoft.AspNetCore.Identity.SecurityStampValidator`1 [Domain.AppUser]”:尝试激活“ Microsoft.AspNetCore.Identity.SecurityStampValidator`1 [Domain.AppUser]”时,无法解析类型为“ Microsoft.AspNetCore.Authentication.ISystemClock”的服务。)(验证服务描述符“ ServiceType:Microsoft.AspNetCore”时出错.Identity.ITwoFactorSecurityStampValidator寿命:作用域实现类型:Microsoft.AspNetCore.Identity.TwoFactorSecurityStampValidator`1 [Domain.AppUser]':无法为类型'Microsoft.AspNetCore.Authentication解析服务。
System.InvalidOperationException:验证服务描述符'ServiceType:Microsoft.AspNetCore.Identity.ISecurityStampValidator生存期:范围实现类型:Microsoft.AspNetCore.Identity.SecurityStampValidator`1 [Domain.AppUser]':无法解析类型为Microsoft的服务。尝试激活“ Microsoft.AspNetCore.Identity.SecurityStampValidator'1 [Domain.AppUser]”时遇到AspNetCore.Authentication.ISystemClock。
System.InvalidOperationException:尝试激活“ Microsoft.AspNetCore.Identity.SecurityStampValidator`1 [Domain.AppUser]”时,无法解析类型为“ Microsoft.AspNetCore.Authentication.ISystemClock”的服务。
在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory(Type.ServiceType,TypeimplementType,CallSiteChain callSiteChain,ParameterInfo []参数,布尔throwIfCallSiteNotFound)
在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallite implementationType,CallSiteChain callSiteChain)
在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor描述符,类型的serviceType,CallSiteChain callSiteChain,的Int32时隙)
在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(ServiceDescriptor serviceDescriptor,CallSiteChain callSiteChain)
在Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.ValidateService(ServiceDescriptor描述符)
-内部异常堆栈跟踪的结尾-
在Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.ValidateService(ServiceDescriptor描述符)
在Microsoft.Extensions.DependencyInjection .ServiceProvider..ctor(IEnumerable`1 serviceDescriptors,ServiceProviderOptions选项)
-内部异常堆栈跟踪的结尾-
验证服务描述符'ServiceType:Microsoft.AspNetCore.Identity.ITwoFactorSecurityStampValidator生命周期:范围实现类型:Microsoft.AspNetCore.Identity.TwoFactorSecurityStampValidator`1 [Domain.AppUser]':无法解析类型为Microsoft.AspNetCore.Authentication的服务。 ISystemClock”,同时尝试激活“ Microsoft.AspNetCore.Identity.TwoFactorSecurityStampValidator`1 [Domain.AppUser]”。---> System.InvalidOperationException:尝试激活“ Microsoft.AspNetCore.Identity.TwoFactorSecurityStampValidator`1 [Domain.AppUser]”时,无法解析类型为“ Microsoft.AspNetCore.Authentication.ISystemClock”的服务。在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(类型serviceType,
在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(ServiceDescriptor serviceDescriptor,CallSiteChain)中的Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor描述符,type serviceType,CallSiteChain callSiteChain,Int32插槽) .ServiceLookup.ServiceProviderEngine.ValidateService(ServiceDescriptor描述符)-内部异常堆栈跟踪的结尾-在Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.ValidateService(ServiceDescriptor描述符)在Microsoft.Extensions.DependencyInjection.ServiceProvider.ctor( IEnumerable`1 serviceDescriptors,ServiceProviderOptions选项)
知道我在做什么错吗?
最好使用AddDefaultIdentity
来帮助您注册SignInManager
。您可以参考以下步骤:
编辑项目文件以安装软件包:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
创建DataContext
:
public class DataContext : IdentityDbContext<AppUser>
{
public DataContext(DbContextOptions<DataContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
Startup.cs:
services.AddDbContext<DataContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<AppUser>()
.AddEntityFrameworkStores<DataContext>();
注入SignInManager
:
private readonly UserManager<AppUser> _userManager;
private readonly SignInManager<AppUser> _signInManager;
private readonly DataContext _context;
public WeatherForecastController(UserManager<AppUser> userManager,SignInManager<AppUser> signInManager, DataContext dbContext)
{
_userManager = userManager;
_signInManager = signInManager;
_context = dbContext;
}
并使用像:
await _signInManager.SignInAsync(user, isPersistent: false);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句