无法从 ASP.NET Core 2.1 控制器获取 IdentityUser 数据
Unable to get IdentityUser data from ASP.NET Core 2.1 controller
我正在 ASP.NET Core 2.1 中开发应用程序。我将身份与内置用户帐户一起使用。现在,我正在尝试在此应用程序中卡住的地方开发一个用户维护模块。我无法获取控制器内的数据。这是我的代码:
ApplicationDbContext.cs:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
}
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser,IdentityRole>(config => {
config.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders();
services.AddMemoryCache();
services.AddSession();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider();
services.AddSingleton<IEmailSender, EmailSender>();
}
ApplicationUser.cs:
public class ApplicationUser : IdentityUser
{
[Required]
public string FirstName { get; set; }
[Required]
public string Name { get; set; }
}
Index.cshtml:
@model IEnumerable<TestIdentity.Models.ApplicationUser>
@{
ViewData["Title"] = "Index";
}
<h2>Application users</h2>
@foreach (var item in Model)
{
<p>@item.Name</p>
}
ApplicationUsersController.cs::
public class ApplicationUsersController : Controller
{
private readonly ApplicationDbContext _context;
public ApplicationUsersController(ApplicationDbContext context)
{
_context = context;
}
// GET: Administrator/ApplicationUsers
public async Task<IActionResult> Index()
{
return View(await _context.ApplicationUsers.ToListAsync());
}
}
_context.ApplicationUsers.ToListAsync()
没有返回任何结果,尽管我的 AspNetUsers table.
中有数据
IdentityUser
不属于您的 dbContext
。您需要改用 UserManager<IdentityUser>
。
你的 ApplicationUsersController
class 应该是这样的
public class ApplicationUsersController : Controller
{
private readonly ApplicationDbContext _context;
private readonly UserManager<IdentityUser> _userManager;
public ApplicationUsersController(ApplicationDbContext context,
UserManager<IdentityUser> userManager;)
{
_context = context;
_userManager = userManager;
}
// GET: Administrator/ApplicationUsers
public async Task<IActionResult> Index()
{
return View(await _userManager.Users.Cast<ApplicationUser>().ToListAsync());
}
}
如果您想为您的身份使用自定义 ApplicationUser
而不是默认 IdentityUser
。您需要在声明模型后进行一些更改。
1.In 数据库上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
2.In startup.cs:
services.AddIdentity<ApplicationUser,IdentityRole>(config => {
config.SignIn.RequireConfirmedEmail = true;
})
...
3.In 你的 /Shared/_LoginPartial.cshtml
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
我正在 ASP.NET Core 2.1 中开发应用程序。我将身份与内置用户帐户一起使用。现在,我正在尝试在此应用程序中卡住的地方开发一个用户维护模块。我无法获取控制器内的数据。这是我的代码:
ApplicationDbContext.cs:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
}
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser,IdentityRole>(config => {
config.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders();
services.AddMemoryCache();
services.AddSession();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider();
services.AddSingleton<IEmailSender, EmailSender>();
}
ApplicationUser.cs:
public class ApplicationUser : IdentityUser
{
[Required]
public string FirstName { get; set; }
[Required]
public string Name { get; set; }
}
Index.cshtml:
@model IEnumerable<TestIdentity.Models.ApplicationUser>
@{
ViewData["Title"] = "Index";
}
<h2>Application users</h2>
@foreach (var item in Model)
{
<p>@item.Name</p>
}
ApplicationUsersController.cs::
public class ApplicationUsersController : Controller
{
private readonly ApplicationDbContext _context;
public ApplicationUsersController(ApplicationDbContext context)
{
_context = context;
}
// GET: Administrator/ApplicationUsers
public async Task<IActionResult> Index()
{
return View(await _context.ApplicationUsers.ToListAsync());
}
}
_context.ApplicationUsers.ToListAsync()
没有返回任何结果,尽管我的 AspNetUsers table.
IdentityUser
不属于您的 dbContext
。您需要改用 UserManager<IdentityUser>
。
你的 ApplicationUsersController
class 应该是这样的
public class ApplicationUsersController : Controller
{
private readonly ApplicationDbContext _context;
private readonly UserManager<IdentityUser> _userManager;
public ApplicationUsersController(ApplicationDbContext context,
UserManager<IdentityUser> userManager;)
{
_context = context;
_userManager = userManager;
}
// GET: Administrator/ApplicationUsers
public async Task<IActionResult> Index()
{
return View(await _userManager.Users.Cast<ApplicationUser>().ToListAsync());
}
}
如果您想为您的身份使用自定义 ApplicationUser
而不是默认 IdentityUser
。您需要在声明模型后进行一些更改。
1.In 数据库上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
2.In startup.cs:
services.AddIdentity<ApplicationUser,IdentityRole>(config => {
config.SignIn.RequireConfirmedEmail = true;
})
...
3.In 你的 /Shared/_LoginPartial.cshtml
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager