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. vue-cli目录结构分析

    vue3初始化一个项目,查看其项目结构,会发现比vue2的更加简洁. package.json说明 项目的配置文件,定义了项目的基本信息以及项目的相关包依赖,npm运行命令等,位于项目根目录. scr ...

  2. 【题解】P4570 [BJWC2011]元素 - 线性基 - 贪心

    P4570 [BJWC2011]元素 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 给你 \(n\) 个二元组 \( ...

  3. 使用User Agent和代理IP隐藏身份

    一.为何要设置User Agent 有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的 ...

  4. pytorch seq2seq闲聊机器人加入attention机制

    attention.py """ 实现attention """ import torch import torch.nn as nn im ...

  5. Web前端三大主流框架是什么?Web前端前景与就业形势

    近十年以来,IT行业发展火热,衍生了很多新职业,例如UI设计师.开发工程师.软件测试工程师等等,在众多备受瞩目的新生职业中,Web前端工程师是其中的一员.那么Web前端三大主流框架是什么呢? 一.We ...

  6. BUAA_OO 第二单元总结

    作业分析 第一次作业 本次作业是单次可捎带电梯的设计,主要是初步了解多线程的设计实现和测试,本身算法设计非常简单.这次作业整体来说不是很难,是多线程的入门,主要目的就是让我们认识,了解一下什么是多线程 ...

  7. 高德地图首席科学家任小枫QA答疑汇总丨视觉+地图技术有哪些新玩法?

    上周,阿里巴巴高德地图首席科学家任小枫在#大咖学长云对话#的在线直播活动上就计算机视觉相关技术发展以及在地图出行领域的应用与大家做技术交流,直播间互动火爆,尤其在QA环节,学弟学妹们纷纷就感兴趣的视觉 ...

  8. MySQL的远程链接

    安装好我们的mMySQL,是不是也有种无从下手的感觉,不用怕,接下来我们可以使用远程连接来可视化我们的数据库的数据: 1. 打开我们的数据库,帐号是root,密码查看文件就行了 2.使用命令: mys ...

  9. rabbitMQ消息队列原理

    MQ:Message Queue,消息队列,是一种应用程序对应用程序的通信方法:应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 1      rabbitMQ入 ...

  10. 修复.NET的HttpClient

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 早在2016年我们就报道过 ,.NET的HttpClient存在一些问题.随着.NET Co ...