晕了!这个配置值从哪来的?

如果有同事问你,数据库连接串的值和appsettings.json配的不一样,从哪来的?你能回答的出来吗?

配置读取顺序

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<IConfigurationProvider>,猜测应该是顺序排列的。

然后反向遍历Providers,读取配置key对应的值,如果存在那应该就是配置的来源了。

让我们验证一下。

Demo

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配的不一样,相信你可以回答的出来了吧!

欢迎关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

client中周期性边界_「微评」增加艺术品在投资组合中的比例 推进国家艺术软实力...

艺术品作为一种兼具收藏属性和投资属性的物品&#xff0c;其最初被人们所接受的是其收藏属性。在进入二十一世纪后&#xff0c;其投资属性才逐渐显现。艺术品的双重属性增加了其投资价值&#xff0c;再叠加显著的顺周期性&#xff0c;艺术品能够在经济向好时为投资者提供超额收…

面向.NET开发人员的Dapr——分布式世界

面向.NET开发人员的Dapr——前言The world is distributed分布式世界Just ask any cool kid: Modern, distributed systems are in, and monolithic apps are out!随便问一个酷小子&#xff0c;他们都会说&#xff1a;现代、分布式系统时间已经到来&#xff0c;单体应用已经成为…

豆瓣最高评分8.1!万维钢:读懂这本书,你会比身边人更深的理解这个时代

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;这几年全球各大科技巨头纷纷进入人工智能领域&#xff0c;催生了一大批技术的…

camunda流程定义表无数据_[Python04] 学习snakemake,三步轻松搭建生信流程!

随着学习的不断深入&#xff0c;分析的数据越来越多。你会发现&#xff0c;日常生信分析不过是调用一些相同的函数或者包分析不同的数据&#xff0c;换汤不换药。那么&#xff0c;如何把分析过程流程化&#xff0c;让数据像工厂的流水线一样自动被处理&#xff1f;最简单的法子…

基于centos5.8源码安装nginx之LNMP

LNMP 指的是什么呢&#xff0c;这里可以“望文生义”&#xff0c;其是linux NGINX Mysql PHP的组合。每一种工具的安装都有其特长来吸引我们去使用它&#xff0c;对此就要了解其组合的各个工具的特点&#xff1a;Linux&#xff1a;不用多说&#xff0c;这是我们都熟知的以开…

cheatengine找不到数值_“不会找问题”,只配在底层,最高效的思维方式导图,人生开挂!...

点击右上角【关注】&#xff0c;每天获取企业经营管理秘籍&#xff01;总裁周刊&#xff0c;与您一同成长&#xff01;声明&#xff1a;文章来源于zhang_liangj&#xff0c;不代表高管周刊立场&#xff0c;如有异议&#xff0c;请私信&#xff01;文|张良计现在&#xff0c;我们…

比乐高便宜十倍!4合1电动遥控积木玩法百变

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;前几天与同事在聊天&#xff0c;他说小时候的梦想就是拥有很多很多的玩具。没…

python类库32[多线程同步Lock+RLock+Semaphore+Event]

2019独角兽企业重金招聘Python工程师标准>>> 一 多线程同步 由于CPython的python解释器在单线程模式下执行&#xff0c;所以导致python的多线程在很多的时候并不能很好地发挥多核cpu的资源。大部分情况都推荐使用多进程。 python的多线程的同步与其他语言基本相同…

加个ing是什么意思_take的意思竟然是“要求”?奇奇怪怪的熟词僻义打卡终于来了!...

慢慢来&#xff0c;比较快。只要不喊停&#xff0c;我们就继续。考研人被玩坏了&#xff0c;出题人&#xff1a;只要我不承认&#xff0c;就没有人能阻止我。下面盘点一下出题人的x操作&#xff1a;2020年英语二完形&#xff1a;trying&#xff0c;乍一看是不是和“尝试”有关&…

每日一笑 | 今天是植树节,我想在你心里种点逼树

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

怎么用计算机计算出选手最后得分,WPS技巧:TRIMMEAN函数计算选手得分

如图1就是某大奖赛的选手评分情况表。在“最后得分”一项中&#xff0c;我们可以用LARGE函数或SMALL函数来计算&#xff0c;如在J3中输入下面的公式&#xff1a;AVERAGE(LARGE(B3:I3,{2,3,4,5,6,7}))即可以得到正确的结果。这里&#xff0c;我们介绍ET提供的内部平均值函数——…

Windows 程序包管理器 1.0 正式发布

在 Microsoft Build 2021 开发者大会上&#xff0c;微软正式发布 Windows Package Manager&#xff08;程序包管理器&#xff09;1.0 正式版&#xff0c;目前在 GitHub 上已有超过 1600 个程序包可供下载。Windows 程序包管理器是一个综合的程序包管理器解决方案&#xff0c;由…

围棋天才柯洁怒怼央视国际记者,用实力斩获清华大学免试资格

全世界只有3.14 % 的人关注了数据与算法之美3月10 日&#xff0c;国家体育总局发布了《2019年优秀运动员免试入学推荐名单》&#xff0c;一批在体育领域获得亮眼成就的运动员们&#xff0c;将获得中国各所高校的免试入学机会。在名单上&#xff0c;数据汪找到一个熟悉的名字——…

计算机专业杀毒,计算机病毒查杀

面对计算机病毒日益剧增&#xff0c;普通人的电脑中病毒的几率越来越大&#xff0c;学习几招查杀病毒的方法&#xff0c;有助于保持系统安全运行也避免一些不必要的损失。下面是学习啦小编跟大家分享的是计算机病毒查杀&#xff0c;欢迎大家来阅读学习。计算机病毒查杀步骤/方法…

Azure 上的网站如何识别不同国家和地区的用户

点击上方蓝字关注“汪宇杰博客”导语跨国服务的网站通常需要针对不同国家和地区的用户显示不同的内容。通常我们会根据用户的IP地址识别Ta所在的国家和地区&#xff0c;而自己编写代码以及购买和维护IP数据库&#xff0c;或使用三方的IP数据服务&#xff0c;是潜在的996成本。虽…

中小学不得在校内设置食品经营场所,量子摩尔定律问世,美团运营摩拜亏45亿,英伟达史上最大手笔收购,这就是今天的大新闻。...

今天是3月12日农历二月初六今天星期二去吃饭老板问要饭的吗一兄弟说我要饭的我要饭怎么觉得这对话有点怪怪下面是今天的大新闻中小学不得在校内设置食品经营场所&#xff08;中国新闻网&#xff09;据教育部网站消息&#xff0c;由教育部、国家市场监督管理总局、国家卫生健康委…

轮廓处理函数详细

ApproxChains用多边形曲线逼近 Freeman 链 CvSeq* cvApproxChains( CvSeq* src_seq, CvMemStorage* storage, int methodCV_CHAIN_APPROX_SIMPLE, double parameter0, int minimal_perimeter0, int recursive0 ); src_seq涉及其它链的链指针storage存储多边形线段位置的缓存m…

html5与课程思政,“课程思政”怎样做

&#xff3b;本站讯 ]为了提升学校教师的课程思政意识和课程思政建设水平,提高课程思政优秀案例征集水平,5月21日,教学促进与教师发展中心举办了课程思政专题线上分享会.中心主任张树永出席会议,120位教师通过雨课堂参加了直播活动.“课程思政”怎样做&#xff1f;教学案例设计…

Windows 11 快速体验:开始菜单居中,全系圆角设计!

系统类型&#xff1a;Windows 11 专业工作站版 系统版本&#xff1a;Dev系统版本号&#xff1a;OS Build 21996.1任务栏 Windows 11 任务栏上的“开始”菜单和应用程序图标由此前 Windows 操作系统中的“左对齐”样式变为“居中”。如果你不喜欢“居中”可以通过个性化设置更改…

数学建模,还得这样学!

最近天气逐渐晴朗回温&#xff08;伊芙布德干内库毛德川状态暂时告一阶段&#xff09;&#xff0c;数学建模的热度也在逐步回温&#xff08;据说大家开始了数学建模知识储备&#xff09;&#xff0c;常有小伙伴私聊小天咨询关于数学建模的事情。春节假期也已经过去&#xff0c;…