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();
如此,就可以直接使用配置对象了
在实际项目中,我们可将其写到一个类中,通过调用实现。
更多分享,请大家关注我的个人公众号: