如何从 ASP.NET Core Identity 类 访问其他实体?
How to access other entities from ASP.NET Core Identity classes?
ASP.NET Core 的新手。我正在使用 Identity 框架进行身份验证,在其他 Register razor 页面中搭建脚手架。在 Register.cshtml.cs
中,我想要获取用于填充下拉菜单的数据。数据位于 Entity Framework 表的另一部分。所以目的是能够 select 例如注册用户时的“公司”。
我不太喜欢 fiddle 太多 Register.cshtml.cs
,即修改构造函数以获取我自己的服务 and/or 上下文对象。但是如何从那个页面访问“我自己的”表格呢?
可以吗?或者不应该这样做(为什么?)?如果没有,关于将此一般用户管理内容与身份框架结合使用有什么建议吗?
谢谢,
帕勒
ASP.NET Core Identity 用于管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等。我们可以使用UserManager, RoleManager and SignInManager来管理下面的表:
有关身份的更多详细信息,请参阅 Identity on ASP.NET Core。
要访问其他 Entity Framework 表,我认为您必须使用 Register.cshtml.cs 中的数据库上下文,如下所示:
public class RegisterModel : PageModel
{
private readonly SignInManager<ApplicationUser> _signInManager;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ILogger<RegisterModel> _logger;
private readonly IEmailSender _emailSender;
private readonly ApplicationDbContext _context;
public RegisterModel(
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
ILogger<RegisterModel> logger,
ApplicationDbContext context,
IEmailSender emailSender)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
_context = context;
_emailSender = emailSender;
}
[BindProperty]
public InputModel Input { get; set; }
public string ReturnUrl { get; set; }
[BindProperty]
public List<Company> Companies { get; set; }
public IList<AuthenticationScheme> ExternalLogins { get; set; }
public class InputModel
{
...
}
public async Task OnGetAsync(string returnUrl = null)
{
ReturnUrl = returnUrl;
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
Companies = _context.Companies.ToList(); //get all companies from database.
}
此外,如果您仍然不想使用数据库上下文。您可以考虑使用固定选项列表或使用枚举列表来设置 select 项目,而不是从数据库中获取它们。
ASP.NET Core 的新手。我正在使用 Identity 框架进行身份验证,在其他 Register razor 页面中搭建脚手架。在 Register.cshtml.cs
中,我想要获取用于填充下拉菜单的数据。数据位于 Entity Framework 表的另一部分。所以目的是能够 select 例如注册用户时的“公司”。
我不太喜欢 fiddle 太多 Register.cshtml.cs
,即修改构造函数以获取我自己的服务 and/or 上下文对象。但是如何从那个页面访问“我自己的”表格呢?
可以吗?或者不应该这样做(为什么?)?如果没有,关于将此一般用户管理内容与身份框架结合使用有什么建议吗?
谢谢,
帕勒
ASP.NET Core Identity 用于管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等。我们可以使用UserManager, RoleManager and SignInManager来管理下面的表:
有关身份的更多详细信息,请参阅 Identity on ASP.NET Core。
要访问其他 Entity Framework 表,我认为您必须使用 Register.cshtml.cs 中的数据库上下文,如下所示:
public class RegisterModel : PageModel
{
private readonly SignInManager<ApplicationUser> _signInManager;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ILogger<RegisterModel> _logger;
private readonly IEmailSender _emailSender;
private readonly ApplicationDbContext _context;
public RegisterModel(
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
ILogger<RegisterModel> logger,
ApplicationDbContext context,
IEmailSender emailSender)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
_context = context;
_emailSender = emailSender;
}
[BindProperty]
public InputModel Input { get; set; }
public string ReturnUrl { get; set; }
[BindProperty]
public List<Company> Companies { get; set; }
public IList<AuthenticationScheme> ExternalLogins { get; set; }
public class InputModel
{
...
}
public async Task OnGetAsync(string returnUrl = null)
{
ReturnUrl = returnUrl;
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
Companies = _context.Companies.ToList(); //get all companies from database.
}
此外,如果您仍然不想使用数据库上下文。您可以考虑使用固定选项列表或使用枚举列表来设置 select 项目,而不是从数据库中获取它们。