我看过关于如何在ASP.NET Core中禁用注册模板的指南:
https://stackoverflow.com/a/58852405/3850405
它基本上是参考这篇文章:
https://learn.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-5.0&tabs=visualstudio#禁用页面
在服务器项目中运行该命令效果良好,所有内容都可以删除。但是,当您尝试从客户端再次登录时,现在会出现以下错误:
处理请求时发生未处理的异常。InvalidOperationException:无法解析类型的服务'Microsoft.AspNetCore.Identity.SignInManager`1[Microsoft.AspNetCore.IdentityUser]'尝试激活时"Blazor.Server.Areas.Identity。Pages。Account。LoginModel"。Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvidersp,Type Type,Type requiredBy,bool isDefaultParameterRequired(
阅读脚手架标识的独立或托管Blazor WebAssembly应用程序,它说:
客户端Blazor WebAssembly应用程序使用自己的Identity UI方法,但不能使用ASP.NET核心标识脚手架。托管Blazor解决方案的服务器端ASP.NET核心应用程序可以遵循本文中的Razor Pages/MVC指南就像任何其他类型的支持Identity的ASP.NET Core应用程序一样。
Blazor框架不包括Razor组件版本的标识UI页面。Identity UI Razor组件可以自定义构建,也可以从不受支持的第三方来源获得。
Given托管Blazor解决方案的服务器端ASP.NET核心应用程序可以遵循>本文中的Razor Pages/MVC指南,并且仅配置>就像任何其他类型的支持Identity的ASP.NET Core应用程序一样并且服务器项目是ASP.NET Core Hosted,我希望它能工作。
https://learn.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-5.0&tabs=visualstudio#独立或托管的blazor webassembly应用
我在搜索IdentityUser
时开始看到这个问题。当运行scaffold时,会创建一个名为IdentityHostingStartup.cs
的文件,如下所示:
[assembly: HostingStartup(typeof(Blazor.Server.Areas.Identity.IdentityHostingStartup))]
namespace Blazor.Server.Areas.Identity
{
public class IdentityHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices((context, services) => {
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
context.Configuration.GetConnectionString("ApplicationDbContextConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
});
}
}
}
两者都不可能存在,则Program.cs
CreateHostBuilder(args).Build().Run();
将抛出此异常:
System.InvalidOperationException:'方案已存在:Identity.Application’
这是因为Startup.cs
:中的代码
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
删除IdentityHostingStartup.cs
仍然会引发相同的错误。
关键是从IdentityHostingStartup.cs
看services.AddDefaultIdentity<IdentityUser>
,从Startup.cs
看services.AddDefaultIdentity<ApplicationUser>
。
为了解决这个问题,仅仅遵循微软的指导是不够的。这也必须做到:
删除这些文件:
- Blazor\Server\Areas\IdentityHostingStartup.cs
- Blazor\Server\Areas\Identity \Data\ApplicationDbContext.cs
- Blazor\Server\wwwroot\favicon.ico
然后编辑BlazorServerAreasIdentityPagesAccountlogin.cshtml.cs
将IdentityUser
的每个实例更改为ApplicationUser
。
现在一切正常!
我还在appsettings.json
-ConnectionStrings
中得到了一个额外的行,称为ApplicationDbContextConnection
。只需删除这条线。
您也可以删除这些文件,因为它们已经存在于\Areas\Identity \Pages:下
- Blazor\Server\Pages\_ViewStart.chtml
- Blazor\Server\Pages\_ViewImports.cshtml
- Blazor\Server\Pages\_LoginPartial.chtml