我目前有一个针对完整.NET Framework的.NET Core Web App和一个包含我的EF6实现的.NET 4.6.1类库项目。
我这两个目前正在合作。
现在我需要添加Identity,但我需要自定义实现。 (如果重要的话,我是针对现有用户表构建的,只关心本地登录)
因此,在4.6.1类库项目中,我使用本指南创建了自定义的标识类/商店/经理:https://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity
我坚持的部分是如何配置.NET核心应用程序以使用非核心版本的身份。
所有教程都有类似于
的配置services.AddIdentity<ApplicationUser, ApplicationRole>(config => { })
.AddEntityFrameworkStores<ApplicationDbContext>();
和
app.UseIdentity();
但是这两种方法只存在于Microsoft.AspNetCore.Identity中,而不存在于Microsoft.AspNet.Identity.Core中,这是类库正在使用的。
.NET Core App应引用哪些框架? Startup.cs配置应该是什么样的?
为了简单起见,我的所有自定义身份代码都与上面链接的文章完全相同。
Startup.cs代码如下所示(引用了AspNetCore.Identity)
services.AddIdentity<ApplicationUser, CustomRole>(config => { /* config */ })
.AddUserManager<ApplicationUserManager>()
.AddUserStore<CustomRoleStore>()
.AddDefaultTokenProviders();
样本控制器
public AccountController(ApplicationSignInManager signInManager)
{
_signInManager = signInManager;
}
尝试运行时出错
InvalidOperationException:类型ApplicationUserManager必须从UserManager派生。
答案 0 :(得分:0)
但是,这两种方法仅存在于类库使用的Microsoft.AspNetCore.Identity中,而不存在于Microsoft.AspNet.Identity.Core中。
您应该严格区分两种api:ASP NET身份https://github.com/aspnet/AspNetIdentity和ASP NET Core身份https://github.com/aspnet/Identity
.NET Core应用程序应引用哪些框架?
应引用ASP NET核心身份(Microsoft.AspNetCore)。
Startup.cs的配置应该是什么样?
由于要使用EF6,因此需要将“ Microsoft.AspNetCore.Identity.EntityFrameworkCore”(https://github.com/aspnet/Identity/tree/master/src/EF)移植到使用EF6的自己的实现中。之后,您需要提供自己的.AddEntityFrameworkStores<TDbContext>();
扩展方法。因此,Startup.cs应该保持不变(除了使用,要引用AddEntityFrameworkStores,您需要指向已移植的lib名称空间)。