1、前言

文件配置提供程序默认的给我们提供了ini、json、Xml等。都是读取不同格式的文件。文件配置提供程序支持文件可寻、必选、文件变更的监视。

2、读取配置文件

主要运用的包:需要Ini、xml的添加相关包就行。

这次依然使用 Core3.1 WebApi项目,在启动程序接口里面读取json配置文件,先看看json文件的格式。里面有很多嵌套的子元素。

{
"Name": "wyy",
"Age": ,
"QQ": "",
"CardInfo": {
"Name": "wyy",
"Card": "5303231999XXX",
"Birthday": "2001-02-28",
"Address": {
"Provience": "云南省",
"City": "XX市",
"Country": "XX县"
}
},
"IsMarry": true
}

我们在WeatherForecastController中修改get方法来读取配置文件

[HttpGet]
public int Get()
{
var builder = new ConfigurationBuilder();
//参数 文件路径 optional:文件不错在就会报错(默认false) reloadOnChange:文件变更了读取新的文件(默认true)
builder.AddJsonFile("config.json",optional:false,reloadOnChange:true);
var configRoot = builder.Build().GetSection("CardInfo").GetSection("Address");
var city = $"City:{configRoot["City"]}";
Console.WriteLine(city);
return ;
}

这里需要注意的是,如果有很多层就挨个的GetSection 下去,现在读取到的就是Address里面的信息。这里读取就跟MVC里面的一样的  直接configRoot["节点名"];

3、使用实体类来接收配置文件

新增一个实体类configDto,里面的信息要跟配置文件对应,数据类型也要对应,这里的原理就跟JsonConvert序列化一样 不对应的就接收不到值

 public class ConfigDto
{
public string Name { get; set; }
public int Age { get; set; }
public string QQ { get; set; }
public CardInfo CardInfo { get; set; }
public bool IsMarry { get; set; } }
public class CardInfo
{
public string Name { get; set; }
public string Card { get; set; }
public string Birthday { get; set; }
public Address Address { get; set; } }
public class Address
{
public string Provience { get; set; }
public string City { get; set; }
public string Country { get; set; }
}

调用的代码

[HttpGet]
public int Get()
{
var builder = new ConfigurationBuilder();
//参数 文件路径 optional:文件不错在就会报错(默认true) reloadOnChange:文件变更了读取新的文件(默认true)
builder.AddJsonFile("config.json",optional:true,reloadOnChange:true);
ConfigDto conf = new ConfigDto();
var configRoot = builder.Build();
configRoot.Bind(conf);
return ;
}

运行项目打上断点  添加监视可以Dto也获取到值了,这样强类型的调用起来岂不是更方便。

4、监视文件的变更

[HttpGet]
public int Get()
{
var builder = new ConfigurationBuilder();
//参数 文件路径 optional:文件不错在就会报错(默认false) reloadOnChange:文件变更了读取新的文件(默认true)
builder.AddJsonFile("config.json",optional:false,reloadOnChange:true); ConfigDto conf = new ConfigDto();
var configRoot = builder.Build();
configRoot.Bind(conf);
//监视文件变更
IChangeToken token = configRoot.GetReloadToken();
ChangeToken.OnChange(() => configRoot.GetReloadToken(), () =>
{
//做你想做的事 业务逻辑
Console.WriteLine("文件修改了");
});
return ;
}

修改文件可以看到保存的时候就会出现,不知道为何会出现两次下来研究研究;

5、总结

这里主要弄了文件的读取、监视、强类型接收等操作、关于配置文件的程序修改下来慢慢研究。关于实体类型是否能设置私有有待考证。学无止境。

每日一句心灵鸡汤:其实一个人也是可以活得漂亮,自己笑给自己看,自己哭给自己听。懂得让步的人是聪明的,这是把决定事态走向的主动权握在了自己手上。感情对抗中,赢了面子就输了情分。往往死撑到底的人,都成孤家寡人。弯腰不是认输,只是为了拾起丢掉的幸福。

 

Asp.Net Core 3.1学习-读取、监听json配置文件(7)的更多相关文章

  1. asp.net core启动源码以及监听,到处理请求响应的过程

    摘要 asp.net core发布至今已经将近6年了,很多人对于这一块还是有些陌生,或者说没接触过:接触过的,对于asp.net core整个启动过程,监听过程,以及请求过程,响应过程也是一知半解,可 ...

  2. asp.net core 二 Nginx Supervisor 负载,监听

           ASP.NET Core负载均衡集群搭建(CentOS7+Nginx+Supervisor+Kestrel)          asp.net core在linux运行下,一但命令行退出 ...

  3. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  4. ASP.NET Core实现类库项目读取配置文件

    前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...

  5. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

  6. 如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容?

    原文:如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容? 文章名称: 如何在ASP.NET Core自定义中间件读取Request.Body和 ...

  7. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  8. ASP.NET Core on K8S学习初探(3)部署API到K8S

    在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...

  9. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

随机推荐

  1. 详解 迭代器 —— Iterator接口、 ListIterator接口 与 并发修改异常

    (请关注 本人"Collection集合"博文--<详解 Collection集合>) Iterator接口(迭代器): 概述: 对 collection 进行迭代的迭 ...

  2. Spring5:Java Config

    @Configuration @Bean @ComponentScan @ImportResource 使用Java的方式配置spring,完全不使用spring配置文件,交给java来做! 两个注解 ...

  3. mysql参数max_binlog_cache_size设置不当引发的血案

    日常运维中的坑真是防不胜防,不一小心就遇到别人给你挖的坑.最近又遇到经验不足的DBA不知道从哪拷贝的配置文件(据说是当时参加某培训机构视频培训是资料里的模板,真的是误人子弟呀),其中把max_binl ...

  4. react useCallback notice

    多个不同输入框共用一个方法时使用useCallback: params = initParams = {code: "code_test", name: "name_te ...

  5. 类内部装饰器的使用:property、classmethod与staticmethod

    1.property property是一种特殊的属性,可实现把函数名变为属性名使用.它可以在不改变类接口的前提下使用存取方法 (即读值和取值) 来修改数据的属性,property类有3个方法gett ...

  6. 8个超好用的Python内置函数,提升效率必备(小白必看)

    python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好了可以大大提高代码效率. 这次来梳理下8个好用的python内置函数. 1.set() 当需要对一个列表进行去重操作的 ...

  7. 【Linux常见命令】echo命令

    echo - display a line of text 打印输出内容的常用命令,可以结合重定向>和追加>>对文件进行覆盖或追加内容. 语法: echo [SHORT-OPTION ...

  8. 华硕笔记本无法U盘启动,快捷键识别不了

    http://www.udaxia.com/upqd/8254.html 转载于:https://www.cnblogs.com/wanglinjie/p/10507888.html

  9. Vue项目中jQuery的引入

    1.安装jQuery依赖 npm install jquery --save-dev 2.在webpack.base.conf.js头部加入如下代码 var webpack = require(&qu ...

  10. Ansible安装部署

    Ansible安装部署 Ansible是一种集成IT系统的配置管理, 应用部署, 执行特定任务的开源平台. 它基于Python语言实现, 部署只需在主控端部署Ansible环境, 被控端无需安装代理工 ...