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

在ASP.NET Core应用中无法从JSON文件读取连接字符串的问题

解决EF Core配置连接字符串后抛出"Value cannot be null"异常的问题

我来帮你排查这个问题,结合你给出的Startup构造函数代码,大概率是连接字符串没有被正确加载到配置中,导致后续初始化DbContext时传入了null值。咱们一步步梳理可能的原因和解决办法:

1. 检查JSON文件的存在性与输出配置

首先确认你的ConnectionServerJson.json文件是否在项目的内容根目录(也就是env.ContentRootPath指向的路径,一般是项目根文件夹)。如果文件放在子文件夹里,要写完整的相对路径,比如./config/ConnectionServerJson.json。

另外,一定要在Visual Studio里右键这个JSON文件,设置复制到输出目录属性为「始终复制」或者「如果较新则复制」——如果不这么做,运行或发布项目时文件不会被拷贝到输出目录,ConfigurationBuilder自然加载不到任何配置,后续获取连接字符串就是null。

2. 验证JSON文件的格式是否正确

连接字符串的JSON结构必须符合规范,示例如下:

{
  "ConnectionStrings": {
    "HotelDbContext": "Server=你的服务器地址;Database=酒店数据库名;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}

注意两点:

  • 必须有ConnectionStrings这个顶层节点,EF Core的GetConnectionString方法会默认从这个节点下查找对应键值
  • 你后续在配置DbContext时使用的键名(比如HotelDbContext)必须和JSON里的完全一致,大小写敏感

3. 检查Startup中配置DbContext的代码

确保你在ConfigureServices方法里正确获取了连接字符串,示例代码如下:

public void ConfigureServices(IServiceCollection services)
{
    // 假设你的DbContext叫HotelDbContext
    services.AddDbContext<HotelDbContext>(options =>
    {
        var connectionString = configuration.GetConnectionString("HotelDbContext");
        // 这里可以加个调试输出,确认connectionString是否为null
        Console.WriteLine($"连接字符串:{connectionString}");
        options.UseSqlServer(connectionString);
    });
    // 其他服务配置...
}

如果这里的键名和JSON里的不匹配,或者configuration本身没加载到配置,connectionString就会是null,直接触发"Value cannot be null"异常。

4. 调整ConfigurationBuilder的配置项

你当前的AddJsonFile没有指定可选参数,建议加上optional: false,这样如果JSON文件不存在会直接抛出异常,而不是默默加载空配置,方便你快速定位问题:

var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("ConnectionServerJson.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables();

另外,你使用了AddEnvironmentVariables(),如果系统环境变量里存在同名的连接字符串键,可能会覆盖JSON中的配置。如果环境变量里的对应值是空的,也会导致问题,可以暂时注释掉这一行,测试是否是环境变量的干扰。

5. 确认Configuration字段的声明

确保你在Startup类中正确声明了IConfiguration字段,比如:

private IConfiguration configuration;

public Startup(IHostingEnvironment env)
{
    // 你的配置构建代码...
    configuration = builder.Build();
}

如果字段类型不对或者没正确赋值,后续使用时也会出现null引用问题。

按照上面的步骤逐一排查,应该就能找到问题所在啦!

内容的提问来源于stack exchange,提问作者Sergiu Robert Dia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:06:22