【发布时间】:2018-10-09 15:29:44
【问题描述】:
从 .NET Core 1.1 升级后遇到此错误
InvalidOperationException:无法解析范围服务 'Microsoft.AspNetCore.Identity.UserManager`1[Project1.Models.ApplicationUser]' 来自根提供商。 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(类型 serviceType, ServiceProvider serviceProvider)
Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(类型 服务类型,服务提供者服务提供者) Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(类型 服务类型) Microsoft.Extensions.Internal.ActivatorUtilities+ConstructorMatcher.CreateInstance(IServiceProvider 提供者) Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider 提供者,类型 instanceType,Object[] 参数) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+c__DisplayClass4_0.b__0(RequestDelegate 下一个)Microsoft.AspNetCore.Builder.Internal.ApplicationBuilder.Build() Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
Startup.cs
public void ConfigureServices(IServiceCollection services) {
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("connstring")));
services.AddIdentity<ApplicationUser, IdentityRole>(o => {
// configure identity options
o.Password.RequireDigit = false;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
o.Password.RequireNonAlphanumeric = false;
o.Password.RequiredLength = 6;
})
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
app.UseAuthentication();
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
var rewriteOptions = new RewriteOptions().AddRedirectToHttps();
app.UseRewriter(rewriteOptions);
Program.cs
public class Program
{
public static void Main(string[] args)
{
var host = BuildWebHost(args);
host.Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseSetting("detailedErrors", "true")
.UseStartup<Startup>()
.Build();
}
ApplicationDBContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser> {
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options) {
}
public DbSet<UserDevice> UserDevices { get; set; }
public DbSet<Advertisement> Advertisements { get; set; }
protected override void OnModelCreating(ModelBuilder builder) {
base.OnModelCreating(builder);
builder.Entity<UserDevice>().HasKey(x => new { x.Id, x.DeviceId }); // configure composite key
}
}
【问题讨论】:
-
你是如何升级的?升级包或将代码移动到新项目?
-
@NevilleNazerane 我更新了包
-
那么您可能忘记更新某些内容或需要
IdentityOptions选项进行初始化。尝试使用services.Configure<IdentityOptions> -
修复使用 .UseDefaultServiceProvider(options => options.ValidateScopes = false)
标签: c# asp.net-core asp.net-core-2.0 asp.net-core-mvc-2.0