NETCORE中如何操作Appsettings.json 文件

对于很多初学NETCORE的同学来说,怎么从appsettings.json 文件中获取各种类型数据,一直没搞明白。

今天我们就对它的几种数据格式的读取做个说明。

appsettings.json  是我们项目的默认配置文件(我们也可以自定义其他.json文件,加到项目中),其是以json格式进行数据配置的。

那json配置就有多种格式,直接字符串、字符串数组的、对象的、对象数组的。

那都怎么来获取呢

一、字符串

{
  "word": "太阳"
}

第一种读取方法:

直接 _configuration["配置的key"]进行读取,适用于配置本身就是单一的key:value格式。

    public class HomeController : Controller
    {

        private readonly IConfiguration _configuration;
        public HomeController(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        public string Index(string content)
        {
            return _configuration["word"];
           
        }
    }

运行起来,正确显示

第二种方式:

 public string Index(string content)
        {
            return _configuration.GetSection("word").Value;
           
        }

二、字符串数组

 

 

 一般我们读取出来到List当中

{
  "word": [ "太阳" ,"月亮"]
}

第一种方式,采用Bind 方法

public string Index(string content)
        {
            List<string> list = new List<string>();
            _configuration.GetSection("word").Bind(list);
           
            return list.Aggregate(string.Empty,(current,s)=>current+s+",").TrimEnd(',');
        }

第二种方式,采用 Get方法

    public string Index(string content)
        {
           var list= _configuration.GetSection("word").Get<List<string>>();
           
            return list.Aggregate(string.Empty,(current,s)=>current+s+",").TrimEnd(',');
        }

第三种,采用GetChilden方法

    public string Index(string content)
        {
            var list = _configuration.GetSection("word").GetChildren().Select(s => s.Value).ToList();
           
            return list.Aggregate(string.Empty,(current,s)=>current+s+",").TrimEnd(',');
        }

 

三、对象类型

{
  "word": {
    "name": "张三",
    "age": 18
  }
}

第一种方式

多层级的,可采用 GetSection方法的层级1:层级2:层级3等方式逐级获取某个key的值

 public string Index(string content)
        {

            string name = _configuration.GetSection("word:name").Value;
            string age = _configuration.GetSection("word:age").Value;

            return name + age;
        }

 第二种方式,定义一个model实体对象来进行映射

public class Student
    {
        public string Name { get; set; }
        public int Age { get; set;}
    }
     public string Index(string content)
        {
            var stu = new Student();
            _configuration.GetSection("word").Bind(stu);
            return stu.Name + stu.Age;
        }

除了用Bind方法,一样可以用Get方法

   public string Index(string content)
        {
           
          var stu=  _configuration.GetSection("word").Get<Student>();
            return stu.Name + stu.Age;
        }

 

Bind和Get的方法区别在于,一个需要先初始化对象,一个不需要。

但是当配置不存在时,Get方法会报错,Bind方法不会,进返回一个刚初始化的对象。

四、对象数组

对象数组的处理方式,跟对象类型基本一致,只是对象改为数组而已。

这里做1个例子就好

{
  "word": [
    {
      "name": "张三",
      "age": 18
    },
    {
      "name": "李四",
      "age": 19
    }
  ]
       public string Index(string content)
        {
            var stuList = new List<Student>();
            _configuration.GetSection("word").Bind(stuList);
            return stuList.Aggregate(string.Empty, (current, s) => current + s.Name + s.Age + ",").TrimEnd(',');
        }

 

五、新增json配置文件

比如我们在项目的根目录下,新增一个my.json文件,内容如下

{
  "key": "这是新增文件"
}

对于mvc项目,我们需要在Program中把新文件给加入

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((host, config) =>
                   {
                       config.AddJsonFile("my.json",true,true);
                   })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

主要是增加标红那段的内容。

   public string Index(string content)
        {
            var str= _configuration.GetSection("key").Value;
            return str;
        }

控制器中就可通过_configuration对象正常获取到配置内容了。

对于文件目录,这里要特别说明一下,很多同学没搞清楚

配置的默认目录是当前应用程序的根目录,所以如果我们是在根目录下新增文件,可直接写“my.json”文件名即可。

若文件是在其他文件夹下,可采用这种方式  

config.AddJsonFile("XXX目录/my.json");
注意,不能是写 /开头,那样路径会错误哦

当然,我们也可以更改默认目录,但是不建议,一改,就会影响所有的文件配置

改目录,如下即可:

   .ConfigureAppConfiguration((host, config) =>
                   {
                       config.SetBasePath(Directory.GetCurrentDirectory()+"实际路径");
                       config.AddJsonFile("my.json",true,true);
                   })

再添加之前,通过SetBasePath 配置默认路径。

 

六、在控制台程序中,我们怎么使用 Configution 对象

首先要引入 包:using Microsoft.Extensions.Configuration

 ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.SetBasePath(Directory.GetCurrentDirectory());
            builder.AddJsonFile("appsettings.json",true,true);
            var config = builder.Build();

            Console.WriteLine(config.GetSection("word").Value);
            Console.Read();

如此,就可以直接使用配置对象了

在实际项目中,我们可将其写到一个类中,通过调用实现。

 

更多分享,请大家关注我的个人公众号:

posted @ 2022-10-11 15:33  黄明辉  阅读(1215)  评论(0编辑  收藏  举报