一. 各种文件的读取
1.说明
在.Net Core中,各种配置文件的读取都需要依赖【Microsoft.Extensions.Configuration】程序集,当然在Asp.Net Core中已经内置了,然后通过依赖注入IConfiguration configuration对象进行配置文件的相关操作。
比如在控制器注入该对象:
相关约定:
①:配置键不区分大小写,例如,ConnectionString 和 connectionstring 被视为等效键。
②:在配置API中,冒号分隔符(:)适用于所有平台。
③:配置值是字符串
④:NULL值不能存储在配置中或绑定到对象。
注:
在Core MVC中,默认识别appsettings.json 文件,如果要添加其它类型的文件,需要通过AddJson、AddXml、AddIniFile、AddInMemoryCollection等方法手动添加进入, 方便起见通过 config.SetBasePath(Directory.GetCurrentDirectory());将当前目录设置为基础目录。
这些AddXX方法,可以配置后面两个参数均为true,eg:config.AddJsonFile("Config/ypf1.json", optional: true, reloadOnChange: true);这样的话当配置文件发生变化的时候,会自动更新加载,而不必重启整个项目。
项目结构:手动新增的配置文件都在Config文件夹下(如下图),然后都在Program类中进行加载进来(代码如下)
1 public class Program 2 { 3 public static readonly Dictionary<string, string> _dict = new Dictionary<string, string> 4 { 5 {"MKey1", "value1"}, 6 {"MKey2", "value2"} 7 }; 8 9 public static void Main(string[] args) 10 { 11 CreateWebHostBuilder(args).Build().Run(); 12 } 13 14 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => 15 WebHost.CreateDefaultBuilder(args) 16 //配置相关 17 .ConfigureAppConfiguration((hostingContext, config) => 18 { 19 //1. 设置当前目录为基础目录(后面则可以用相对路径) 20 config.SetBasePath(Directory.GetCurrentDirectory()); 21 //2. 加载json文件 (配置后面两个参数为true,当配置文件发生变化的时候,会自动更新加载,而不必重启整个项目) 22 config.AddJsonFile("Config/ypf1.json", optional: true, reloadOnChange: true); 23 //3. 加载xml文件 24 config.AddXmlFile("Config/ypf2.xml"); 25 config.AddXmlFile("Config/ypf3.xml"); 26 //4. 加载ini文件 27 config.AddIniFile("Config/ypf4.ini"); 28 //5. 加载内存文件 29 config.AddInMemoryCollection(_dict); 30 }) 31 .UseStartup<Startup>(); 32 }
2. Json文件的读取
(1).读取规则:
A:普通对象直接通过键名来读取; B:对象中套对象通过多个键名(中间通过:连接)来读取;C: 数组对象则可以 键名:0(或1 或2)的方式来读取。
(2).实战演练:
① 项目默认的appsettings.json的读取,
1 { 2 "Logging": { 3 "LogLevel": { 4 "Default": "Warning" 5 } 6 }, 7 "AllowedHosts": "*", 8 //下面自定义一些值,用于测试配置文件的读取 9 "MyFullName": "Maru Li", 10 "User": { 11 "userName": "ypf", 12 "userAge": 15, 13 "Child": { 14 "childName": "ydb", 15 "age": 12 16 } 17 }, 18 "StudentList": [ 19 { 20 "sName": "qdkjdx" 21 }, 22 { 23 "sName": "bjdx" 24 } 25 ], 26 //测试绑定类 27 "starship": { 28 "name": "USS Enterprise", 29 "registry": "NCC-1701", 30 "class": "Constitution", 31 "length": 304.8, 32 "commissioned": false 33 }, 34 //测试绑定数组 35 "myArray": ["001","002","003"], 36 "json_array": { 37 "key": "valueA", 38 "subsection": [ 39 "valueB", 40 "valueC", 41 "valueD" 42 ] 43 } 44 45 46 47 }