【.Net8教程】(一)读取配置文件全面总结

2023-12-24 03:36

本文主要是介绍【.Net8教程】(一)读取配置文件全面总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境:.net8.0

1. 准备条件

先在appsettings.Development.json或appsettings.json添加配置
添加一个DbOption

{"DbOption": {"Conn": "foolishsunday@csdn"}
}

2.直接读取json配置节点的几种写法

在Main函数中读取json配置
方式一

var conn1 = builder.Configuration["DbOption:Conn"];

方式二

var conn2 = builder.Configuration.GetValue<string>("DbOption:Conn");

方式三

var conn3 = builder.Configuration.GetSection("DbOption").GetSection("Conn").Value;

方式四

var conn4 = builder.Configuration.GetSection("DbOption")["Conn"];

3.转化为类或record类型

定义类

    public class DbOption{public string Conn { get; set; }}

转化

DbOption opt = builder.Configuration.GetSection(nameof(DbOption)).Get<DbOption>();

4.通过注入IConfiguration方式

    [ApiController][Route("[controller]")]public class TestController : ControllerBase{private readonly IConfiguration _configuration;public TestController(IConfiguration configuration){_configuration = configuration;}[HttpPost]public async Task<IActionResult> GetConfig(){var conn1 = _configuration["DbOption:Conn"];var conn2 = _configuration.GetValue<string>("DbOption:Conn");var conn3 = _configuration.GetSection(nameof(DbOption)).GetSection("Conn").Value;return Ok();}   }

5.或通过Options模式(推荐)

写法一

builder.Services.Configure<DbOption>(builder.Configuration.GetSection(nameof(DbOption)));

写法二

builder.Services.AddOptions<DbOption>().Bind(builder.Configuration.GetSection(nameof(DbOption)));

写法三

builder.Services.AddOptions<DbOption>().BindConfiguration(nameof(DbOption));

然后通过注入IOptions、IOptionsMonitor或IOptionsSnapshot获取

    [ApiController][Route("[controller]")]public class DemoController : ControllerBase{private readonly DbOption _dbOption;public DemoController(IOptionsSnapshot<DbOption> dbOption){_dbOption = dbOption.Value;//注意此处为.Value}   }

推荐使用IOptionsSnapshot

Options模式有三个接口IOptions、IOptionsMonitor或IOptionsSnapshot
IOption :单例,一旦生成就不会再更改,除非通过代码的方式更改;
OptionsMonitor :也是单例,但是它只要配置有变更,它就会更新,能通过代码的方式更改值;
IOptionsSnapshot :作用域注册,一次请求里值不会变,在配置文件更新的下一次请求,它的值会更新,但是它不能跨范围通过代码的方式更改值,只能在当前范围(请求)内有效

校验

其中写法二与写法三,如果忘记了配置,获取到值为null,是不会报错的。
如果需要在获取到null时报错,则可以添加Validate校(可抛OptionsValidationException异常)

builder.Services.AddOptions<DbOption>().BindConfiguration(nameof(DbOption))
.Validate(option =>
{if (string.IsNullOrEmpty(option.Conn)) return false;else return true;
});

6. 注意:调试和发布后启动,读取配置文件的区别

1、当启动vs调试时,由于启动的环境是Development,所以读取配置文件会优先读取appsettings.Development.json;如果没有值,才读取appsettings.json的值;
2、但当我们发布程序启动后(如双击.exe启动),则读取的是appsettings.json文件。
此区别可能会造成初学者产生混淆。

这篇关于【.Net8教程】(一)读取配置文件全面总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530423

相关文章

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

SpringBoot加载profile全面解析

《SpringBoot加载profile全面解析》SpringBoot的Profile机制通过多配置文件和注解实现环境隔离,支持开发、测试、生产等不同环境的灵活配置切换,无需修改代码,关键点包括配置文... 目录题目详细答案什么是 Profile配置 Profile使用application-{profil

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL