• .net core 读取配置的几种方式


    json配置文件示例 

    1. {
    2. "Logging": {
    3. "LogLevel": {
    4. "Default": "Information",
    5. "Microsoft.AspNetCore": "Warning"
    6. }
    7. },
    8. "Account": {"username": "zhangsan","password":"123"},
    9. "AllowedHosts": "*"
    10. }

    例如读取Account节点数据

    方法一

    1. #region 方式1
    2. string username1 = builder.Configuration["Account:username"];
    3. string password1 = builder.Configuration["Account:password"];
    4. #endregion
    5. #region 方式2
    6. string username2 = builder.Configuration.GetSection("Account:username").Value;
    7. string password2 = builder.Configuration.GetSection("Account:password").Value;
    8. #endregion
    9. #region 方式3
    10. string username3 = builder.Configuration.GetValue<string>("Account:username");
    11. string password3 = builder.Configuration.GetValue<string>("Account:password");
    12. #endregion

    在增加一个数组的节点

    1. {
    2. "Logging": {
    3. "LogLevel": {
    4. "Default": "Information",
    5. "Microsoft.AspNetCore": "Warning"
    6. }
    7. },
    8. "Account": {
    9. "username": "zhangsan",
    10. "password": "123"
    11. },
    12. "Port": [1,2,3,4],
    13. "AllowedHosts": "*"
    14. }

    泛型方法builder.Configuration.GetVaue("key")读取配置的,结果返回null

     对于数组我们只能这样读取

    1. var Port0 = builder.Configuration.GetValue<int>("Port:0");
    2. var Port1 = builder.Configuration.GetValue<int>("Port:1");
    3. var Port2 = builder.Configuration.GetValue<int>("Port:2");
    4. var Port3 = builder.Configuration.GetValue<int>("Port:3");

    因为配置文件都是键值的形式存在,而对于数组而言,下标就是它的键,通过下标找到对应的值 

    对于这样太繁琐,我想返回跟配置一样的数组形式 可以这样

    var Port=builder.Configuration.GetSection("Port").GetChildren().Select(x => x.Value).ToArray();

    运行结果 ,得到我们想要的

     方法二

    新建一个类,跟配置文件节点名保持一致

    1. public class Account {
    2. public string username { get; set; }
    3. public string password { get; set; }
    4. }

    找到这个节点绑定到这个类

    1.   Account account = new Account();
    2.   builder.Configuration.Bind("Account", account);

     运行结果

     

     同理

     对于前面读取数组,也能用绑定方式获取

    1. List<int> Port = new List<int>();
    2. builder.Configuration.Bind("Port", Port);

    以上都是在Program.cs中读取,如何在控制器中读取呢

    在Program.cs中加入

     builder.Services.Configure(builder.Configuration.GetSection("Account"));

    在控制器中注入

     private readonly IOptionsSnapshot optAccountSettings

    在接口中

    1. [HttpGet]
    2. public IActionResult Account()
    3. {
    4. var db = _optAccountSettings.Value;
    5. return Ok(db);
    6. }

     返回结果

  • 相关阅读:
    linux之chmod命令
    JavaIO流02:IO流概述和流的分类
    Django——模板层、模型层
    【计算机毕业设计】32.学生宿舍管理系统源码
    cola架构:有限状态机(FSM)源码分析
    第2章 ROS 通信机制 3 —— 参数服务器 plumbing_param_server
    基于低代码平台的OA系统,更灵活高效!
    解决OpenOCD烧录STM32失败, 无法通过SWD连接的问题
    Scell dormancy功能介绍
    .NET Core(.NET6)中gRPC使用
  • 原文地址:https://blog.csdn.net/qq_42335551/article/details/128185613