IConfiguration调用GetConnectionString获取连接字符串返回null问题求助
排查解决方案
- 首先确认
appsettings.json文件的输出属性配置:右键文件选择【属性】,将复制到输出目录选项修改为如果较新则复制,避免文件未被部署到运行目录导致配置读取失败。 - 验证配置读取结果:在Startup构造函数内加断点,调试查看
configuration.GetConnectionString("LocalDatabase")的返回值:- 如果返回为空:检查WebHostBuilder配置是否丢失了默认的json配置源,默认配置下会自动加载appsettings.json,若你自定义了WebHost构建逻辑,需手动添加
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - 如果返回值和配置一致:排查
ApplicationContext类的构造函数,是否存在接收DbContextOptions<ApplicationContext>类型参数的重载,若无该重载EF Core会使用默认配置,不会生效你在Startup中设置的连接字符串。
- 如果返回为空:检查WebHostBuilder配置是否丢失了默认的json配置源,默认配置下会自动加载appsettings.json,若你自定义了WebHost构建逻辑,需手动添加
- 检查LocalDB实例匹配性:你配置中使用的实例名为
ProjectsV13,对应VS2017的默认LocalDB实例,若你使用的是VS2019及以上版本,默认实例名为MSSQLLocalDB,可在cmd执行sqllocaldb i命令查看本地所有可用实例,替换为对应实例名即可。 - 生命周期匹配检查:你注册的
ApplicationContext默认是Scoped生命周期,若在单例服务(如你注册的ITokenService)中直接注入ApplicationContext会触发作用域不匹配错误,可通过注入IServiceScopeFactory手动创建作用域获取DbContext实例解决。 - 中间件逻辑验证:你当前配置的JwtMiddleware顺序正确,若遇到鉴权相关问题可单独排查中间件内部的令牌解析逻辑是否异常。
内容的提问来源于stack exchange,提问作者Christopher
相关产品推荐
相关产品推荐

