辽宁朝阳哪家做网站好,app开发公司,网站自适应手机转码,培训机构官网如果有同事问你#xff0c;数据库连接串的值和appsettings.json配的不一样#xff0c;从哪来的#xff1f;你能回答的出来吗?配置读取顺序ASP.NET Core 中的配置是使用一个或多个配置提供程序执行的#xff0c;配置提供程序使用各种配置源从键值对读取配置数据。ASP.NET C… 如果有同事问你数据库连接串的值和appsettings.json配的不一样从哪来的你能回答的出来吗?配置读取顺序ASP.NET Core 中的配置是使用一个或多个配置提供程序执行的配置提供程序使用各种配置源从键值对读取配置数据。ASP.NET Core 提供了大量可用的配置提供程序这还不包括可以自定义配置提供程序。添加配置提供程序的顺序很重要因为后面的提供程序添加的配置值将覆盖前面的提供程序添加的值。配置提供程序的典型顺序为appsettings.jsonappsettings.Environment.json用户机密环境变量命令行参数假如appsettings.json配置了开发环境的数据库连接串appsettings.Production.json配置了生产环境的数据库连接串管理员密码仅配置在用户机密中。最终生产环境的配置为键来源数据库连接串appsettings.Production.json管理员密码用户机密分析从IConfigurationRoot 接口的文档上可以了解到IConfigurationRoot是表示 IConfiguration 层次结构的根。使用IConfigurationRoot.Providers可以得到IEnumerableIConfigurationProvider猜测应该是顺序排列的。然后反向遍历Providers读取配置key对应的值如果存在那应该就是配置的来源了。让我们验证一下。Demo1.读取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“