AspNetCore中的配置文件详解
1 配置文件
程序开发中,有些信息是要根据环境改变的,比如开发环境的数据库可能是本地数据,而生产环境下需要连接生产数据库,我们需要把这些信息放到程序外面,在程序运行时通过读取这些外部信息实现不改变程序代码适应不同环境的需求,这些信息就是“配置”。
在AspNetCore中,最常见的配置文件就是appsetings.json,和appsettings.{enviroment}.json。配置数据以json的方式存储在外部的json文档中。除此之外,还提供其他的配置数据源 【不同的ConfigurationProvider】,允许系统从多个配置源中读取配置文件,如环境变量或者系统内存。
2 配置源与配置读取规则
针对配置涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider。
- Configuration对象承载着在编程过程中使用的配置信息,在AspNetCore中,配置功能通常通过在构造函数中注入IConfiguration来实现;
- ConfigurationProvider则是配置信息原始数据源的提供者;
- ConfigurationBuilder它利用ConfigurationProvider提取源数据将其转换为Configuration对象。
AspNetCore中的配置数据源包括
MemoryConfigurationProvider: 从内存中读取配置
JsonConfigurationProvider:从json文档中读取配置
EnvironmentVariablesConfigurationProvider:从系统环境变量中读取配置
CommandLineConfigurationProvider:从运行命令行中读取配置
等。
在同时处在多个数据源的情形下,配置数据的读取数据又会是什么样呢?
这个问题不需要我们去担心。在构建AspNetCore项目时,将会在Program类中根据预配置的默认值加入配置服务。
public class Program{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});}
按照以下顺序为应用提供默认配置(从最高优先级到最低优先级):
(1)使用命令行配置提供程序通过命令行参数提供。
(2)使用非前缀环境变量配置提供程序通过非前缀环境变量提供。
(3)应用在 环境中运行时的用户机密。
(4)使用 JSON 配置提供程序通过 appsettings.{Environment}.json 提供。 例如,appsettings.Production.json 和 appsettings.Development.json。
(5)使用 JSON 配置提供程序通过 appsettings.json 提供。
这意味着,多个配置源中存在同样的key 节点时,会按照配置的优先级别覆盖。
如在开发环境中,appsettings.Development.json 配置会覆盖在 appsettings.json 中找到的值。因为级别大于4
3 配置数据结构与读取配置数据
真实项目中涉及的配置大都具有一个结构化的层次结构,所以在配置模型中的Configuration对象同样具有这样的结构。尽管数据源不同,但是经过ConfigurationBuilder处理后,配置信息将以统一的配置树的逻辑结构进行存储。
而一个Configuration对象表示的是组成这棵配置树的某个节点,这棵配置树则可以通过作为根节点的Configuration对象来体现。体现为键值对的原子配置项一般至存在于作为叶子节点的Configuration对象中,非叶子节点的Configuration包含一组子节点,而每个子节点同样是一个Configuration对象。

配置信息逻辑上以树形结构存储,实际在内存中是以字典【Dictionary】键值对的形式存储。Key是每个配置项所在配置节在配置树中的路径,路径采用冒号(“:”)进行分割。 以appsettings.json 为例,可通过configuration[key]取出配置的信息
{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*"
}
//注入配置服务IConfigurationpublic void Configure(IApplicationBuilder app, IWebHostEnvironment env,IConfiguration configuration){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapGet("/", async context =>{//浏览器读取json文档中的配置数据并输出: //key 为节点所在数的路径,以" :"作为分隔符await context.Response.WriteAsync(configuration["Logging:LogLevel:Default"].ToString()+"\n");await context.Response.WriteAsync(configuration["Logging:LogLevel:Microsoft.Hosting.Lifetime"].ToString()+"\n");await context.Response.WriteAsync(configuration["AllowedHosts"].ToString()+"\n");});});}
4 配置与环境
根据AspNetCore默认值设置的配置优先级可知,配置文件的读取还与系统的环境有关。并且,在实际开发中会根据环境变量的不同设置不同的配置信息。所以环境的设置是很重要的。
在AspNetCore 中,在开发状态时,可以根据launchSettings.json 文件来设定加载的环境

也可以设置本地系统环境变量

通常可设定的环境值有 Developmet 、Production、Staging。而在项目发布后,通常为了程式的安全性能,默认读取的是Production的环境。不能通过修改launchSettings.json文件来决定发布后项目的环境值。
相关文章:
AspNetCore中的配置文件详解
1 配置文件 程序开发中,有些信息是要根据环境改变的,比如开发环境的数据库可能是本地数据,而生产环境下需要连接生产数据库,我们需要把这些信息放到程序外面,在程序运行时通过读取这些外部信息实现不改变程序代码适应…...
实时更新天气微信小程序开发
1.新建一个天气weather项目 2.在app.json中创建一个路由页面 当我们点击保存的时候,微信小程序会自动的帮我们创建好页面 3.在weather页面上书写我们的骨架 4.此时我们的页面很怪,因为没有给它添加样式和值。此时我们给它一个样式。(样式写在…...
css渐变
线性渐变 liner-gradient属性值用来设置线性渐变,第一个参数值是方向,默认是从上往下,往后就是渐变颜色的种类。 background-image:liner-gradient(方向,颜色1,颜色2...) .box {display: flex;width: 400px;height: …...
《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 2 MapReduce and the New Software Stack
来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 2 MapReduce and the New Software Stack Computing cluster means large collections of commodity hardware, including conventional processors (“compute nodes”) connected by Ethernet …...
HTML零基础快速入门(详细教程)
1,HTML代码特点 <html><head></head><body>hello world!</body> </html>HTML代码有以下特点: html代码是通过标签来组织的,而标签是由尖括号< >组织的,也可被叫作元素(ele…...
Kubernetes第5天
第七章 Service详解 本章节主要介绍kubernetes的流量负载组件:Service和Ingress。 Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着…...
RK3568平台开发系列讲解(调试篇)debugfs 分析手段
🚀返回专栏总目录 文章目录 一、enable debugfs二、debugfs API三、使用示例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 上有一些典型的问题分析手段,从这些基本的分析方法入手,你可以一步步判断出问题根因。这些分析手段,可以简单地归纳为下图: 从这…...
【Spring框架全系列】SpringBoot配置日志文件
🍧🍧哈喽,大家好,我是小浪。那么上篇博客我们学习了SpringBoot配置文件的相关操作,本篇博客我们将学习一个新的知识点,SpringBoot日志文件。🖥🖥 📲目录 一、日志是什么…...
事务 ---MySQL的总结(六)
事务 多进程进行并改变同一个数据,如果没有进行版本控制,就会出现数据不确定的问题,为此引入了事务的概念。可以进行数据回滚,解决潜在的问题。 事务的概念 一组的DML组成,这一些的DML要么同时成功,要么同…...
22 标准模板库STL之容器适配器
概述 提到适配器,我们的第一印象是想到设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的两个类,可以一起工作。STL中的容器适配器与此类似,是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能和接口。之所…...
目标检测YOLO实战应用案例100讲-基于深度学习的自动驾驶目标检测算法研究
目录 基于深度学习的自动驾驶目标检测算法研究 相关理论基础 2.1 卷积神经网络基本原理...
服务网关Gateway
前言 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 破坏了服务无状态…...
(4)定时器
51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成 作用: 用于计时系统替代长时间Delay,提高运行效率和速度任务切换 STC89C52定时器资源: 定时器个数:3个(T0,T1,T2…...
项目实现读写分离操作(mysql)
读写分离 1.问题说明 2.读写分离 Master(主库)----(数据同步)—> Slave(从库) Mysql主从复制 mysql主从复制 介绍 mysql主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台…...
VP记录:Educational Codeforces Round 148 (Rated for Div. 2) A~D1
传送门:CF 前题提要:本人临近期中,时间较紧,且关于D2暂时没有想到优化算法,因此准备留着以后有时间再继续解决 A题:A. New Palindrome 简单的模拟题,考虑记录每一个字母出现的次数.很容易发现奇数次的数字只能出现一次.因为最多只能在正中间放一个.并且因为不能和初始字符相…...
无线模块|如何选择天线和设计天线电路
无线模块的通信距离是一项重要指标,如何把有效通信距离最大化一直是大家疑惑的问题。本文根据调试经验及对天线的选择与使用方法做了一些说明,希望对工程师快速调试通信距离有所帮助。 一、天线的种类 随着技术的进步,为了节省研发周期&…...
(11)LCD1602液晶显示屏
LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符,自带芯片扫描 显示容量:162个字符,每个字符…...
类和对象下
文章目录 一、初始化列表1、语法:2、初始化顺序 二、static成员三、友元1、友元函数2、友元类 四、拷贝对象时的编译器优化例1、例2、例3、 一、初始化列表 1、语法: 初始化列表: 以一个冒号开始,接着是一个以逗号分隔的数据成员…...
【云计算•云原生】4.云原生之什么是Kubernetes
文章目录 Kubernetes概念Kubernetes核心概念集群podConfigMap Kubernetes架构master节点的组件worker节点组件 Kubernetes网络架构内部网络外部网络 k8s各端口含义 Kubernetes概念 K8S就是Kubernetes,Kubernetes首字母为K,末尾为s,中间一共有…...
云厂商降价潮背后:来中小企业战场「拼刺刀」
如果说过往云厂商的降价打响的是从C端进军B端的营销战,那么在这一轮降价潮背后,对应的则是云厂商从大型KA客户向中小企业进军的信号,强被集成,强获客。 云厂商又一轮降价潮袭来。 5月16日,移动云宣布部分产品线最高降…...
双塔模型线上召回实战:为什么物品向量要离线存,用户向量却要实时算?
双塔模型线上召回实战:为什么物品向量要离线存,用户向量却要实时算? 推荐系统的核心挑战之一,是在海量候选物品中快速筛选出用户可能感兴趣的内容。双塔模型因其高效性和可扩展性,成为工业界主流的召回架构。但一个看似…...
Diablo Edit2终极指南:暗黑破坏神II角色存档编辑器完整教程
Diablo Edit2终极指南:暗黑破坏神II角色存档编辑器完整教程 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否厌倦了在暗黑破坏神II中反复刷装备的枯燥过程?是否想体验…...
避开这7个SEO误区:我用Ahrefs工具拯救网站排名的真实案例
避开这7个SEO误区:我用Ahrefs工具拯救网站排名的真实案例 三年前,我的个人博客突然从谷歌第一页消失,日均流量暴跌72%。当时我自认为掌握了SEO的"秘诀"——频繁交换友链、大量堆砌关键词、每日更新短平快内容。直到用Ahrefs跑完完整…...
STC8H8K64U定时器实战:从寄存器到库函数,手把手教你驱动数码管和按键
STC8H8K64U定时器实战:从寄存器到库函数,手把手教你驱动数码管和按键 在嵌入式开发中,定时器是最基础也最核心的外设之一。STC8H8K64U作为增强型51单片机,提供了多达5个16位定时器,为开发者带来了丰富的定时和计数功能…...
跨平台 Conda 环境迁移:从 Linux 到 Windows 的完整指南
1. 为什么需要跨平台迁移 Conda 环境? 作为一个常年混迹在 Linux 和 Windows 双系统的开发者,我深刻理解环境迁移的痛苦。你可能遇到过这种情况:在 Linux 服务器上训练好的机器学习模型,想在 Windows 本地机器上部署测试ÿ…...
2025网盘直链下载神器LinkSwift:八大平台全速下载完全指南
2025网盘直链下载神器LinkSwift:八大平台全速下载完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...
国产与国际AI IDE工具全解析,哪个更好用(2026.4.15)
我们来对国产与国际主流AI IDE工具进行一次全面的解析。 本文将涵盖当前市场上最具代表性的工具,从核心定位、优缺点、定价、环境与使用方法、使用难度等多个维度进行深度对比。 一、 主流AI IDE工具全景概览 首先,我们将目前主流的AI编程工具分为三大…...
GPLT天梯赛L2-L3难题复盘:从‘三点共线’超时到‘胖达的山头’差分,我的C++踩坑与优化实录
GPLT天梯赛L2-L3难题复盘:从‘三点共线’超时到‘胖达的山头’差分,我的C踩坑与优化实录 参加算法竞赛就像在迷宫中寻找出口,每一次错误的转弯都是通往正确答案的必经之路。去年GPLT天梯赛中,我在L2和L3级别的题目上经历了从超时崩…...
GLM-4.1V-9B-Base应用场景:跨境电商——商品图自动打标+多语言描述生成
GLM-4.1V-9B-Base应用场景:跨境电商——商品图自动打标多语言描述生成 1. 跨境电商的痛点与解决方案 跨境电商卖家每天需要处理大量商品图片,手动添加标签和描述不仅耗时耗力,还容易出现不一致的情况。传统方法面临三大挑战: 效…...
终极指南:3分钟掌握Ofd2Pdf免费OFD转PDF完整教程
终极指南:3分钟掌握Ofd2Pdf免费OFD转PDF完整教程 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 你是否经常遇到OFD格式文件无法打开、无法分享的烦恼?作为中国自主研发的电子…...
