ASP.NET Core Web API配置疑问:连接字符串读取异常求助
解决ASP.NET Core发布后连接字符串找不到的问题
这个坑我之前帮同事排查过好几次,你遇到的情况大概率是配置读取逻辑和ASP.NET Core的设计不匹配,或者发布过程中配置文件没处理好,咱们一步步来解决:
先搞懂核心原因
- 还在沿用.NET Framework的老读取方式:如果你的DbContext是用
ConfigurationManager.ConnectionStrings["DbContext"]来获取连接字符串,那它只会认传统的projectname.exe.config(也就是老框架里的app.config),完全不会去读ASP.NET Core的appsettings.json——这是最常见的原因! - appsettings.json没被正确发布:如果这个文件的「复制到输出目录」属性没设对,发布后服务器上的程序目录里根本没有这个文件,自然读不到配置。
- DbContext注册时没绑定正确的配置源:没有在Program.cs里用ASP.NET Core的原生方式注册DbContext,导致程序不知道要从appsettings.json里拿配置。
具体解决办法
1. 改用ASP.NET Core原生配置方式(强烈推荐)
这是符合Core设计的正确姿势,别再用老框架的ConfigurationManager了!
首先在Program.cs里注册DbContext时,直接从IConfiguration读取:
var builder = WebApplication.CreateBuilder(args); // 注册你的DbContext,指定从appsettings.json读取连接字符串 builder.Services.AddDbContext<YourDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DbContext")));
然后确保appsettings.json里的配置格式正确:
{ "ConnectionStrings": { "DbContext": "Server=xxx;Database=xxx;User Id=xxx;Password=xxx;" } }
这样配置后,程序会自动读取appsettings.json(如果是生产环境,还会优先读appsettings.Production.json),完全不需要依赖exe.config。
2. 检查appsettings.json的发布属性
右键项目里的appsettings.json → 打开「属性」面板 → 把「复制到输出目录」改成「如果较新则复制」或者「始终复制」。这样发布时文件才会被拷贝到程序输出目录,服务器上的程序才能读到它。
3. (不推荐)如果非要用传统的ConfigurationManager
如果因为历史代码原因必须用ConfigurationManager,那你需要:
- 安装
System.Configuration.ConfigurationManagerNuGet包 - 在
projectname.exe.config里手动添加连接字符串(就是你现在正在做的操作)
但这种方式完全违背了ASP.NET Core的配置体系,后续维护会很麻烦,真心不建议这么搞。
4. 检查环境变量的干扰
ASP.NET Core的配置有优先级,环境变量会覆盖appsettings.json的配置。如果你的服务器上设置了ConnectionStrings__DbContext这个环境变量,程序会优先读它的值,可能导致你以为appsettings里的配置没生效。可以登录服务器检查一下环境变量设置。
内容的提问来源于stack exchange,提问作者devC
相关产品推荐
相关产品推荐

