ASP.NET Core(十)Configuration 配置优先级详解
ASP.NET Core 项目启动,默认执行顺序为:宿主 Host -> 读取配置 -> 日志设置 -> 注册服务(DI)-> 添加中间件 -> WebHost 监听 -> 后台 Work 启动。
配置的加载和读取是在启动流程的最前面。微软关于 ASP.NET Core 中的配置文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0
Host.CreateDefaultBuilder 方法中,按照以下顺序为应用提供默认配置:
ChainedConfigurationProvider:添加现有的 作为源。在默认配置示例中,添加主机配置,并将它设置为应用配置的第一个源。
使用 appsettings.json的 appsettings.json。
使用 JSON 配置提供程序通过 appsettings..json 提供。例如,appsettings.Production.json 和 appsettings.Development.json。
应用在 环境中运行时的应用机密。
使用环境变量配置提供程序通过环境变量提供。
使用命令行配置提供程序通过命令行参数提供。
源码如下:
public static IHostBuilder CreateDefaultBuilder(string[] args){var builder = new HostBuilder();builder.UseContentRoot(Directory.GetCurrentDirectory());builder.ConfigureHostConfiguration(config =>{config.AddEnvironmentVariables(prefix: "DOTNET_");if (args != null){config.AddCommandLine(args);}});builder.ConfigureAppConfiguration((hostingContext, config) =>{var env = hostingContext.HostingEnvironment;config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName)){var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));if (appAssembly != null){config.AddUserSecrets(appAssembly, optional: true);}}config.AddEnvironmentVariables();if (args != null){config.AddCommandLine(args);}}).ConfigureLogging((hostingContext, logging) =>{var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);// IMPORTANT: This needs to be added *before* configuration is loaded, this lets// the defaults be overridden by the configuration.if (isWindows){// Default the EventLogLoggerProvider to warning or abovelogging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);}logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));logging.AddConsole();logging.AddDebug();logging.AddEventSourceLogger();if (isWindows){// Add the EventLogLoggerProvider on windows machineslogging.AddEventLog();}}).UseDefaultServiceProvider((context, options) =>{var isDevelopment = context.HostingEnvironment.IsDevelopment();options.ValidateScopes = isDevelopment;options.ValidateOnBuild = isDevelopment;});return builder;}
源码地址:https://github.com/dotnet/extensions/blob/release/3.1/src/Hosting/Hosting/src/Host.cs
通过代码可以看出,程序获取配置优先级依次为:appsettings.json -> appsettings.环境.json -> 环境变量 -> 命令行参数。我们根据优先级进行测试。
新建一个控制台方法返回所有配置信息,代码如下:
private readonly ILogger<HomeController> _logger;public IConfiguration _configuration { get; }public HomeController(ILogger<HomeController> logger, IConfiguration configuration){_logger = logger;_configuration = configuration;}public IActionResult Index(){return Json(_configuration.AsEnumerable());}
首先,appsettings.json 配置文件,如下:
{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","WebConfig": {"Name": "itsvse.com","Date": "2021"}
}
新建 appsettings.Test.json 配置,如下:
{"WebConfig": {"Name": "itsvse.com test"}
}
尝试启动项目,查看 WebConfig:Name 和 WebConfig:Date 的配置,如下图:
找到 Properties -> launchSettings.json 文件,修改 ASPNETCORE_ENVIRONMENT 环境配置为 Test,如下:
"IIS Express": {"commandName": "IISExpress","launchBrowser": true,"environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Test"}}
这时程序会读取 appsettings.Test.json 的配置,尝试重新启动项目,发现 WebConfig:Name 已经覆盖了,如下图:
再次修改 launchSettings.json 文件,通过环境变量设置 WebConfig:Name 的值,代码如下:
"IIS Express": {"commandName": "IISExpress","launchBrowser": true,"environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Test","WebConfig__Name": "itsvse env"}}
备注:环境变量修改 WebConfig:Name 的值,变量名称为:WebConfig__Name (中间用双下划线隔开)
尝试重启项目,发现 WebConfig:Name 的值,已经被环境变量设置的值所覆盖,如下图:
尝试通过命令行的形式修改默认配置的值,启动命令如下:
dotnet run --WebConfig:Name="itsvse command"
如下图:
用实践来测试配置键值的优先级,完。
ASP.NET Core(十)Configuration 配置优先级详解相关推荐
- ASP.NET Core 中间件(Middleware)详解
ASP.NET Core 中间件(Middleware)详解 原文:ASP.NET Core 中间件(Middleware)详解 本文为官方文档译文,官方文档现已非机器翻译 https://docs. ...
- ASP.NET Core分布式项目实战(详解oauth2授权码流程)--学习笔记
最近公司产品上线,通宵加班了一个月,一直没有更新,今天开始恢复,每日一更,冲冲冲 任务13:详解oauth2授权码流程 我们即将开发的产品有一个用户 API,一个项目服务 API,每个服务都需要认证授 ...
- ASP.NET Core的配置(2):配置模型详解
在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...
- ASP.NET Core启动地址配置方法及优先级顺序 | .NET 6 版本
前言 上次,我们讨论了如何通过配置或代码方式修改启动地址:<ASP.NET Core启动地址配置方法及优先级顺序>.不过是基于 .NET 5 版本的. 由于 .NET 6 使用了最小 WE ...
- 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 ASP ...
- ASP.NET Core开发-如何配置Kestrel 网址Urls
ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls. ...
- ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...
- ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...
- 第十二章 Spring Cloud Config 统一配置中心详解
目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...
最新文章
- 图片和文件上传的两款插件
- python 为什么动态语言图片_聊聊动态语言那些事(Python)
- Codeforces Round #709 (Div. 1) B. Playlist 链表维护 + bfs
- 前端学习(2734):重读vue电商网站44之使用 echarts
- SVM支持向量机:分类、回归和核函数
- pyspark--用法
- 2019微信语音转发方法新版微信转发语音方法
- 百度地图秘钥未授权问题
- 计算机内存条能装几个,电脑能装几个内存条_一般电脑插几个内存条
- 折弯机使用说明书_折弯机操作图解法-如何使用折弯机
- ajax查询全国天气预报,使用聚合数据api接口
- 视觉里程计 第一部分:前30年的发展和理论基础
- java 15k,广州-Java高级-15k-22k(月薪)
- web开发学习,HTML标签语义化
- 【读书笔记】《未来闪影》罗伯特·J·索耶
- YUV 后面数字的含义_大众车尾的280、330是什么含义?好多人不懂,买车要看准了...
- 【rpc】超详细介绍
- 完美国际mysql后台_完美国际-后台管理配置-.tomcat配置教程
- java通用dao_java通用DAO | 学步园
- 系统测试的类型有哪些,我给你介绍
热门文章
- Chrome DevTools — Network 1
- 关于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting参数原理和使用...
- Building a Space Station--POJ 2031
- python c 选择_C和Python,小白应该选择学习哪门语言?
- GDB调试qemu-kvm
- 【mysql】mysql优化
- 类属性和实例属性冲突
- 文件传输基础——Java IO流
- Java设计模式(8)组合模式(Composite模式)
- 用计算机算算术平方根顺序是ON然后是什么,第2课时用计算器求一个正数的算术平方根.ppt...