ASP.NET Core 6 如何根据不同运行环境配置对应数据库连接
ASP.NET Core 6 多环境数据库连接自动切换实现
ASP.NET Core 原生自带多环境配置加载能力,不需要手写复杂的环境判断逻辑,按以下步骤配置即可:
1. 按环境拆分配置文件
框架默认的配置加载规则会自动识别当前运行环境,加载对应后缀的配置文件,同名配置键会覆盖通用配置文件的值,配置文件命名规则为appsettings.{环境名}.json。
- 通用固定配置(比如日志级别、跨域规则等所有环境通用的内容)放在根目录的
appsettings.json中 - 测试环境配置新建
appsettings.Development.json(如果自定义环境名为Test就建appsettings.Test.json),存放测试库连接串 - 生产Demo环境配置新建
appsettings.Staging.json(自定义环境名对应改文件名即可),存放Demo生产库连接串
配置文件示例:
通用appsettings.json内容:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "ConnectionStrings": { "DefaultDb": "" } }
测试环境appsettings.Development.json内容:
{ "ConnectionStrings": { "DefaultDb": "Server=.;Database=TestDb;Trusted_Connection=True;TrustServerCertificate=True;" } }
生产Demo环境appsettings.Staging.json内容:
{ "ConnectionStrings": { "DefaultDb": "Server=生产库地址;Database=ProdDemoDb;User Id=数据库账号;Password=数据库密码;TrustServerCertificate=True;" } }
记得把所有新建的配置文件的「复制到输出目录」属性设置为「如果较新则复制」,不然发布后会找不到配置文件。
2. 设置当前运行环境
框架通过ASPNETCORE_ENVIRONMENT环境变量识别当前运行环境,不同场景设置方式如下:
- 本地调试:打开项目根目录的
Properties/launchSettings.json,在对应启动配置的environmentVariables节点下修改ASPNETCORE_ENVIRONMENT的值即可,值和配置文件后缀的环境名保持一致,比如本地测试设为Development,本地模拟Demo环境就设为Staging
配置片段示例:"profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } - 服务器部署:直接在部署服务器的系统环境变量中新增
ASPNETCORE_ENVIRONMENT,值设为对应环境名即可;IIS部署也可以在站点的配置编辑器里单独设置站点级的环境变量,不会影响服务器上其他站点。
3. 服务注册代码无需额外修改
Program.cs中数据库上下文的注册逻辑和你之前写的测试环境逻辑完全一致,不需要加任何if分支判断环境,框架会自动把对应环境的连接字符串注入到配置对象中:
var builder = WebApplication.CreateBuilder(args); // 数据库服务注册,直接取连接串即可,自动匹配当前环境 builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultDb"))); // 其余服务注册、中间件配置保持原有逻辑不变 var app = builder.Build(); // ...中间件配置 app.Run();
补充说明:自定义环境名不需要做额外适配,比如你想把测试环境叫Test、生产Demo叫ProdDemo,只要把配置文件名对应改成
appsettings.Test.json、appsettings.ProdDemo.json,环境变量值对应改成Test、ProdDemo就能正常加载。配置优先级从低到高为:appsettings.json < appsettings.{环境名}.json < 环境变量 < 命令行参数,高优先级配置会覆盖低优先级的同名键。
内容的提问来源于stack exchange,提问作者AvianExpress
相关产品推荐
相关产品推荐

