【发布时间】:2022-10-24 15:06:50
【问题描述】:
我打开了一个基于 ASP.NET Core MVC 和视图模板(不是 Razor 页面)的测试项目(.NET 6、VS2022),并激活了个人用户帐户。
Program.cs 看起来像这样(来自模板):
builder.Services.AddDefaultIdentity<IdentityUser>(options ...
builder.Services.AddControllersWithViews();
...
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
到目前为止,一切都很好。
现在我添加了一些示例代码来播种用户数据库,它需要访问RoleManager:
var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();`
但是,这会引发异常
Microsoft.AspNetCore.Identity.RoleManager`1[Microsoft.AspNetCore.Identity.IdentityRole]' 类型没有服务
这可以通过将
AddDefaultIdentity()更改为AddIdentity()来修复(感谢 Stackoverflow),AddIdentity()引入了IdentityRole:builder.Services.AddIdentity<IdentityUser, IdentityRole>(options ...但是,现在我得到了一个例外
app.MapRazorPages();System.InvalidOperationException: '无法找到所需的服务。请通过在应用程序启动代码中对“ConfigureServices(...)”的调用中调用“IServiceCollection.AddRazorPages”来添加所有必需的服务。
需要配置哪些服务以及如何配置?
当我删除
app.MapRazorPages();时,用户管理页面(登录、用户注册)不再起作用(404 错误)。当我在上面添加
builder.Service.AddRazorPages()时,路由也被破坏:缺少到"/account/login"的路由,可能是因为 Razor 页面的组织方式与 MVC 控制器有些不同。显然,我不想要 Razor 页面,只需要几个视图中的 Razor 逻辑,并且基本上是 MVC 架构。老实说,我有点困惑,因为官方文档没有多大帮助。
【问题讨论】:
-
我试图在我身边重现您的问题,但我没有找到指导我访问 RoleManager 的官方文档。然后我尝试搜索错误信息,找到了这个配置
services.AddDefaultIdentity<User>().AddRoles<IdentityRole>()。您能否告诉我您按照哪个教程访问 RoleManager ? -
嗨,我在生活 REST 项目中看到了这一点(使用
builder.Services.AddControllers();(因此,没有视图)。本教程由 Nate Barbettini 编写,第 90 页:link 这是关于 .NET5,但命令(和生活项目)也应该与 .NET6 一起使用。现在添加您的建议会抛出var app = builder.Build();(我做了:builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true).AddRoles<IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>();
标签: razor asp.net-core-mvc asp.net-core-6.0