在 .NET Core 项目中添加身份时出现 NullReferenceException
NullReferenceException when adding Identity in .NET Core project
我有一个 ASP.NET Core 6 网络应用程序,它使用 EF Core 进行数据库管理,并使用 ASP.NET 身份功能来管理用户。这个网络应用程序没有问题。
现在,我想开发一个独立的控制台应用程序,用于对数据库执行维护任务(播种、清理操作、恢复出厂设置等)
但是我 运行 遇到了问题。
我在维护应用程序的初始化步骤中添加了与我在 Web 应用程序上使用的相同指令来配置 EF Core 和 Itentity,它们非常简单:
private static IHost CreateHost(string[] args)
{
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureServices((_, services) =>
{
services.AddDbContext<MyContext>(options =>
{
options.UseSqlite(connectionString);
});
services.AddDefaultIdentity<MyUser>(opt => { });
services.AddScoped<MyDbService>();
});
return builder.Build();
}
然而,虽然这些说明在我的网络应用程序中可以正常工作,但在控制台应用程序中却不能。特别是,我在调用 services.AddDefaultIdentity<MyUser>(opt => { });
时得到 NullReferenceException
消息中没有内部异常或其他信息。堆栈跟踪是这样的:
at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.GetApplicationAssembly(IdentityBuilder builder)
at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.<>c__DisplayClass0_0.<AddDefaultUI>b__0(ApplicationPartManager apm)
at Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.ConfigureApplicationPartManager(IMvcBuilder builder, Action`1 setupAction)
at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder builder)
at Microsoft.Extensions.DependencyInjection.IdentityServiceCollectionUIExtensions.AddDefaultIdentity[TUser](IServiceCollection services, Action`1 configureOptions)
at MainetnanceApp.Program.<>c.<CreateHost>b__2_0(HostBuilderContext _, IServiceCollection services)
为什么会这样?它与它是控制台应用程序而不是网络应用程序这一事实有关吗?我该如何解决这个问题?
AddDefaultIdentity
适用于网络应用程序而非控制台应用程序。
它添加 UI、令牌提供程序,并配置身份验证以使用身份 cookie。
对于控制台应用程序,您可以使用 AddIdentityCore
。
我有一个 ASP.NET Core 6 网络应用程序,它使用 EF Core 进行数据库管理,并使用 ASP.NET 身份功能来管理用户。这个网络应用程序没有问题。
现在,我想开发一个独立的控制台应用程序,用于对数据库执行维护任务(播种、清理操作、恢复出厂设置等)
但是我 运行 遇到了问题。 我在维护应用程序的初始化步骤中添加了与我在 Web 应用程序上使用的相同指令来配置 EF Core 和 Itentity,它们非常简单:
private static IHost CreateHost(string[] args)
{
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureServices((_, services) =>
{
services.AddDbContext<MyContext>(options =>
{
options.UseSqlite(connectionString);
});
services.AddDefaultIdentity<MyUser>(opt => { });
services.AddScoped<MyDbService>();
});
return builder.Build();
}
然而,虽然这些说明在我的网络应用程序中可以正常工作,但在控制台应用程序中却不能。特别是,我在调用 services.AddDefaultIdentity<MyUser>(opt => { });
NullReferenceException
消息中没有内部异常或其他信息。堆栈跟踪是这样的:
at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.GetApplicationAssembly(IdentityBuilder builder)
at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.<>c__DisplayClass0_0.<AddDefaultUI>b__0(ApplicationPartManager apm)
at Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.ConfigureApplicationPartManager(IMvcBuilder builder, Action`1 setupAction)
at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder builder)
at Microsoft.Extensions.DependencyInjection.IdentityServiceCollectionUIExtensions.AddDefaultIdentity[TUser](IServiceCollection services, Action`1 configureOptions)
at MainetnanceApp.Program.<>c.<CreateHost>b__2_0(HostBuilderContext _, IServiceCollection services)
为什么会这样?它与它是控制台应用程序而不是网络应用程序这一事实有关吗?我该如何解决这个问题?
AddDefaultIdentity
适用于网络应用程序而非控制台应用程序。
它添加 UI、令牌提供程序,并配置身份验证以使用身份 cookie。
对于控制台应用程序,您可以使用 AddIdentityCore
。