Blazor WebAssembly应用程序与个人帐户和ASP.NET核心托管-禁用用户注册



我看过关于如何在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.csCreateHostBuilder(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.csservices.AddDefaultIdentity<IdentityUser>,从Startup.csservices.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

相关内容

  • 没有找到相关文章

最新更新