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

运行ASP.NET Core 2.1 ContactManager示例程序时遇ArgumentNullException错误

解决ASP.NET Core 2.1 ContactManager示例数据库种子初始化时的ArgumentNullException

我在处理ASP.NET Core 2.1的ContactManager示例时也遇到过一模一样的问题,核心原因就是种子初始化流程里,调用userManager.FindByIdAsync(uid)查找用户时返回了null,进而触发ArgumentNullException,最终被包装成AggregateException抛出。你的异常信息也明确指向了这一点:

System.AggregateException HResult=0x80131500 
Message=One or more errors occurred. 
Source=ContactManager 
StackTrace: at ContactManager.Program.Main(String[] args) in C:\Users\EphraimF\source\repos\CMfinal\Program.cs:line 41 
Inner Exception 1: ArgumentNullException: Value cannot be null. 
The error in generated because a null is returned by `userManager.FindByIdAsync(uid)`.

下面是几个经过验证的解决方案和排查步骤:

  • 调整代码执行顺序,先创建用户再查找:检查你的种子初始化代码,必须先完成用户的创建和持久化操作,再执行FindByIdAsync查询。很多时候是代码顺序搞反了,先去查找还没创建的用户,自然返回null。

  • 验证用户创建是否成功:用户创建可能因为密码复杂度不达标、用户名重复等原因失败,导致数据没有写入数据库。调用userManager.CreateAsync后一定要检查返回结果:

    var createResult = await _userManager.CreateAsync(testUser, "YourStrongPassword123!");
    if (!createResult.Succeeded)
    {
        foreach (var error in createResult.Errors)
        {
            Console.WriteLine($"用户创建失败:{error.Description}");
        }
        // 终止后续操作或处理错误
        return;
    }
    
  • 强制保存DbContext更改:创建用户后,别忘了调用await _context.SaveChangesAsync(),确保用户数据被写入数据库。如果跳过这一步,实际数据库中不会存在该用户记录,FindByIdAsync自然查不到。

  • 核对用户ID的准确性:确认传入FindByIdAsync的uid和你创建用户时的ID完全一致。比如你创建用户时用了testUser.Id = Guid.NewGuid().ToString();,那后续查找必须使用这个生成的ID,而不是硬编码的错误值。

调试小技巧:在调用FindByIdAsync前,打印出uid的值,然后直接查看数据库的AspNetUsers表,确认是否存在该ID的用户。这能快速定位是ID错误,还是用户根本没被创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:21:56