You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC 登录后拉取用户数据报UserManager无法实例化错误如何解决

报错原因
  • 直接触发报错的问题:Action方法MySchedule多了多余的UserManager<IdentityUser> userManager入参。ASP.NET Core MVC默认会对Action的所有公开入参执行模型绑定,UserManager<>是Identity框架托管的服务,没有无参构造函数,模型绑定无法创建实例,直接触发报错。且你已经在控制器层面注入了UserManager<ApplicationUser>,这个入参完全没有存在必要。
  • 隐藏的次生问题:HomeController的构造函数写法错误,你加了void返回值,导致它变成了普通的类方法,而非控制器构造函数,依赖注入框架不会自动执行这个方法注入UserManager实例,哪怕删掉Action的多余参数,后续调用_userManager也会触发空引用异常。
修复方案
  1. 先修正控制器构造函数,删掉void返回值:
private UserManager<ApplicationUser> _userManager;
// 构造函数无返回值,参数保持不变
public HomeController(UserManager<ApplicationUser> userManager)
{
    _userManager = userManager;
}
  1. 删掉MySchedule方法的多余UserManager<IdentityUser> userManager入参,修正后的Action代码如下:
public async Task<IActionResult> MySchedule()
{
    var CourseChosen = from m in _context.CourseChosen
                       select m;
    var userid = _userManager.GetUserId(HttpContext.User);
    if (userid == null)
    {
        return RedirectToAction("Login", "Account");
    }
    else
    {
        ApplicationUser user = await _userManager.GetUserAsync(User);
        var identification = user.StudentId;
        CourseChosen = CourseChosen.Where(x => x.StudentId == identification);

        var coursechosen = new MyCourse
        {
            MyCourses = await CourseChosen.ToListAsync()
        };

        return View(coursechosen);
    }
}
  1. 可选校验项:确认你的Startup.cs(.NET 5版本)中已经正确注册了Identity服务,指定了用户类型为ApplicationUser,示例注册代码如下:
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<你的项目DbContext类名>();

内容的提问来源于stack exchange,提问作者Weber Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:48:03