ASP.NET Core数据库连接串的值为什么和appsettings.json配的不一样
这篇“ASP.NETCore数据库连接串的值为什么和appsettings.json配的不一样”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ASP.NETCore数据库连接串的值为什么和appsettings.json配的不一样”文章吧。
一、配置读取顺序ASP.NET Core
中的配置是使用一个或多个配置提供程序执行的,配置提供程序使用各种配置源从键值对读取配置数据。
ASP.NET Core
提供了大量可用的配置提供程序,这还不包括可以自定义配置提供程序。
添加配置提供程序的顺序很重要,因为后面的提供程序添加的配置值将覆盖前面的提供程序添加的值。
配置提供程序的典型顺序为:
appsettings.json
appsettings.Environment.json
用户机密
环境变量
命令行参数
假如,appsettings.json
配置了开发环境的数据库连接串,appsettings.Production.json
配置了生产环境的数据库连接串;管理员密码仅配置在用户机密中。
最终生产环境的配置为:
从IConfigurationRoot
接口的文档上,可以了解到,IConfigurationRoot是表示 IConfiguration 层次结构的根。
使用IConfigurationRoot.Providers
可以得到IEnumerable
,猜测应该是顺序排列的。
然后反向遍历Providers
,读取配置key对应的值,如果存在那应该就是配置的来源了。
让我们验证一下。
三、演示1.读取Providers创建WebApplication1,修改Startup.cs,代码如下:
publicStartup(IConfigurationconfiguration){Configuration=(IConfigurationRoot)configuration;}publicIConfigurationRootConfiguration{get;}publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv){......app.UseEndpoints(endpoints=>{endpoints.MapGet("/test",asynccontext=>{foreach(varproviderinConfiguration.Providers){awaitcontext.Response.WriteAsync(provider.ToString());awaitcontext.Response.WriteAsync("\r\n");}});});......}
从下图看到,顺序应该是正确的:
2.读取配置值继续修改Startup.cs,代码如下:
publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv){......app.UseEndpoints(endpoints=>{endpoints.MapGet("/test2/{key:alpha}",asynccontext=>{varkey=context.Request.RouteValues["key"].ToString();foreach(varproviderinConfiguration.Providers.Reverse()){if(provider.TryGet(key,outstringvalue)){awaitcontext.Response.WriteAsync(provider.ToString());awaitcontext.Response.WriteAsync("\r\n");awaitcontext.Response.WriteAsync(value);break;}}});});......}
运行后查找AllowedHosts
配置,返回结果正确。
再次查找AllowedHosts
配置,返回结果正确。
以上就是关于“ASP.NETCore数据库连接串的值为什么和appsettings.json配的不一样”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。