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();

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

在實際項目中,我們可將其寫到一個類中,通過調用實現。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章