为什么ASP.NET Core的数据库连接串总与appsettings.json配置的值对不上?

2026-03-30 11:081阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计882个文字,预计阅读时间需要4分钟。

为什么ASP.NET Core的数据库连接串总与appsettings.json配置的值对不上?

目录

一、配置读取顺序

二、分析

三、演示

为什么ASP.NET Core的数据库连接串总与appsettings.json配置的值对不上?

1.读取Providers

2.读取配置值

一、配置读取顺序ASP.NET Core 中的配置读取顺序如下: 1. Environment variables(环境变量) 2. Command-line arguments(命令行参数) 3. User secrets(用户机密) 4. App settings file(应用设置文件) 5. Machine configuration file(机器配置文件) 6. Default settings(默认设置)

目录
  • 一、配置读取顺序
  • 二、分析
  • 三、演示
    • 1.读取Providers
    • 2.读取配置值

一、配置读取顺序

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配置内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

标签:

本文共计882个文字,预计阅读时间需要4分钟。

为什么ASP.NET Core的数据库连接串总与appsettings.json配置的值对不上?

目录

一、配置读取顺序

二、分析

三、演示

为什么ASP.NET Core的数据库连接串总与appsettings.json配置的值对不上?

1.读取Providers

2.读取配置值

一、配置读取顺序ASP.NET Core 中的配置读取顺序如下: 1. Environment variables(环境变量) 2. Command-line arguments(命令行参数) 3. User secrets(用户机密) 4. App settings file(应用设置文件) 5. Machine configuration file(机器配置文件) 6. Default settings(默认设置)

目录
  • 一、配置读取顺序
  • 二、分析
  • 三、演示
    • 1.读取Providers
    • 2.读取配置值

一、配置读取顺序

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配置内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

标签: