为什么ASP.NET Core 数据库连接串的值和appsettings.json配的不一样?
目录
一、配置读取顺序二、分析三、演示1.读取Providers2.读取配置值一、配置读取顺序
ASP.NET Core
中的配置是使用一个或多个配置提供程序执行的,配置提供程序使用各种配置源从键值对读取配置数据。
ASP.NET Core
提供了大量可用的配置提供程序,这还不包括可以自定义配置提供程序。
添加配置提供程序的顺序很重要,因为后面的提供程序添加的配置值将覆盖前面的提供程序添加的值。
配置提供程序的典型顺序为:
appsettings.json
appsettings.Environment.json
用户机密环境变量命令行参数
假如,appsettings.json
配置了开发环境的数据库连接串,appsettings.Production.json
配置了生产环境的数据库连接串;管理员密码仅配置在用户机密中。
最终生产环境的配置为:
键 | 来源 |
---|---|
数据库连接串 | appsettings.Production.json |
管理员密码 | 用户机密 |
二、分析
从IConfigurationRoot
接口的文档上,可以了解到,IConfigurationRoot是表示 IConfiguration 层次结构的根。
使用IConfigurationRoot.Providers
可以得到IEnumerable
,猜测应该是顺序排列的。
然后反向遍历Providers
,读取配置key对应的值,如果存在那应该就是配置的来源了。
让我们验证一下。
三、演示
1.读取Providers
创建WebApplication1,修改Startup.cs,代码如下:
public Startup(IConfiguration configuration) { Configuration = (IConfigurationRoot)configuration; } public IConfigurationRoot Configuration { get; } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ...... app.UseEndpoints(endpoints => { endpoints.MapGet("/test", async context => { foreach(var provider in Configuration.Providers) { await context.Response.WriteAsync(provider.ToString()); await context.Response.WriteAsync("\r\n"); } }); }); ...... }
从下图看到,顺序应该是正确的:
2.读取配置值
继续修改Startup.cs,代码如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ...... app.UseEndpoints(endpoints => { endpoints.MapGet("/test2/{key:alpha}", async context => { var key = context.Request.RouteValues["key"].ToString(); foreach (var provider in Configuration.Providers.Reverse()) { if (provider.TryGet(key, out string value)) { await context.Response.WriteAsync(provider.ToString()); await context.Response.WriteAsync("\r\n"); await context.Response.WriteAsync(value); break; } } }); }); ...... }
运行后查找AllowedHosts
配置,返回结果正确。
再次查找AllowedHosts
配置,返回结果正确。
到此这篇关于为什么数据库连接串的值和appsettings.json
配的不一样?的文章就介绍到这了,更多相关数据库连接串的值和appsettings.json配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?