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
相关产品推荐
相关产品推荐

