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

ASP.NET Core中GetConnectionString失效,抛出ArgumentNullException

解决ASP.NET Core中无法从appsettings.json获取连接字符串的问题

嘿,我来帮你搞定这个问题!你碰到的ArgumentNullException,本质是Configuration.GetConnectionString("MyDBConnection")返回了null,导致UseSqlServer方法接收到空参数抛出异常。下面是几个最可能的原因和对应的解决办法:

1. 检查appsettings.json的复制输出属性

这是新手最容易踩的坑!右键项目中的appsettings.json文件,选择「属性」,把复制到输出目录设置为「如果较新则复制」或者「始终复制」。

如果没设置这个属性,程序运行时的输出目录里不会有appsettings.json文件,配置系统自然读不到里面的连接字符串,返回null就是必然的了。

2. 确认配置节点的拼写和结构

虽然你的代码看起来没问题,但再仔细核对一遍:

  • appsettings.json里的ConnectionStrings是顶级节点,不能嵌套在其他节点里
  • MyDBConnection的键名要和Startup中GetConnectionString的参数完全一致(JSON本身大小写敏感,虽然.NET Core配置默认不区分,但尽量保持一致避免意外)
  • 确保连接字符串的值是有效的,比如:
    "MyDBConnection": "Server=.;Database=你的数据库名;Trusted_Connection=True;TrustServerCertificate=True;"
    

3. 验证配置是否正确加载

可以在Startup的构造函数里加一行调试代码,确认配置有没有被正确读取:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    // 调试用,运行时查看控制台输出
    var connString = Configuration.GetConnectionString("MyDBConnection");
    Console.WriteLine($"当前读取到的连接字符串:{connString ?? "null"}");
}

如果输出是null,那说明配置根本没加载进来,回到第一步检查复制属性,或者排查有没有其他配置源(比如环境变量、命令行参数)覆盖了这个值。

另外提一句:你的Program.cs里的.UseContentRoot(Directory.GetCurrentDirectory())其实是多余的,WebHost.CreateDefaultBuilder(args)已经默认把内容根目录设置为当前工作目录了,删掉这一行也不会影响功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:10:26