ASP.NET Core 对于读取配置文件,和之前.NET Framework 有了很大的区别,下面将介绍一下在学习ASP.NET Core过程中的配置文件的读取操作。
1、用VS2019新建一个ASP.NET Core Web 应用程序,MVC项目,如下图:
2、 “key:"value" 格式读取 读取配置文件
/*
* 按照关键字直接读取 2种方法 0级目录 型如 “key:"value" 格式
* "TestReadConfig": "这是从配置文件读取的关键字为【TestReadConfig】的内容。",
*/
var testReadConfig1 = Configuration.GetValue(typeof(string), "TestReadConfig");
//或者这种写法也可以
testReadConfig1 = Configuration.GetValue<string>("TestReadConfig");
//第二种写法
var testReadConfig2 = Configuration.GetSection("TestReadConfig").Value;
3、"Key": {"key": "value" } ==>"ConnectionStrings": {"Default": "Server=;" } 2种方法读取
/*
* 按照关键字直接读取 2种方法 1级目录
* "ConnectionStrings": {"Default": "Server=;" }
*/
/*
* 按照关键字直接读取 2种方法 1级目录
* "ConnectionStrings": {"Default": "Server=;" }
*/
var connectionStrings1 = Configuration.GetSection("ConnectionStrings").GetChildren().FirstOrDefault()?.Value;//默认取第一个
var connectionStrings2 = Configuration.GetSection("ConnectionStrings:Default").Value;//键值对取值
/*
键值对读取方法
"Student": {
"Name": "小明",
"Age": 18
}
*/
var keyValueName = Configuration.GetSection("Student:Name").Value;
var keyValueAge = Configuration.GetSection("Student:Age").Value;
4、组合实体类
/*
* 组合实体类
* "Student": {
"Name": "小明",
"Age": 18
}
*/
int age = -99;
var student = Configuration.GetSection("Student").GetChildren()
.Select(config => new Student()
{
Name = config["Name"],
Age = int.TryParse(config["Age"], out age) == true ? age : age,
});
代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Threading.Tasks;
5 using System.Runtime;
6 using Microsoft.AspNetCore.Builder;
7 using Microsoft.AspNetCore.Hosting;
8 using Microsoft.AspNetCore.HttpsPolicy;
9 using Microsoft.Extensions.Configuration;
10 using Microsoft.Extensions.DependencyInjection;
11 using Microsoft.Extensions.Hosting;
12
13 namespace WebApplicationStudy
14 {
15 public class Startup
16 {
17 public Startup(IConfiguration configuration)
18 {
19 Configuration = configuration;
//加载配置文件方法1 /*var builder = new ConfigurationBuilder().AddJsonFile("AppSettings.json"); Configuration = builder.Build();*/ //加载配置文件方法2 /*Configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("AppSettings.json").Build();*/
20 }
21
22 public IConfiguration Configuration { get; }
23
24 // This method gets called by the runtime. Use this method to add services to the container.
25 public void ConfigureServices(IServiceCollection services)
26 {
27 services.AddControllersWithViews();
28 }
29
30 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
31 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
32 {
33 if (env.IsDevelopment())
34 {
35 app.UseDeveloperExceptionPage();
36 }
37 else
38 {
39 app.UseExceptionHandler("/Home/Error");
40 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
41 app.UseHsts();
42 }
43
44 app.UseHttpsRedirection();
45 app.UseStaticFiles();
46
47 app.UseRouting();
48
49 app.UseAuthorization();
50
51 app.UseEndpoints(endpoints =>
52 {
53 endpoints.MapControllerRoute(
54 name: "default",
55 pattern: "{controller=Home}/{action=Index}/{id?}");
56 });
57 /*
58 {
59 "Logging": {
60 "LogLevel": {
61 "Default": "Information",
62 "Microsoft": "Warning",
63 "Microsoft.Hosting.Lifetime": "Information"
64 }
65 },
66 "AllowedHosts": "*",
67
68 "ConnectionStrings": {
69 "Default": "Server=;"
70 },
71 "TestReadConfig": "这是从配置文件读取的关键字为【TestReadConfig】的内容。",
72 "Student": {
73 "Name": "小明",
74 "Age": 18
75 }
76 }
77 */
78 /*
79 * 按照关键字直接读取 2种方法 0级目录 型如 “key:"value" 格式
80 * "TestReadConfig": "这是从配置文件读取的关键字为【TestReadConfig】的内容。",
81 */
82 var testReadConfig1 = Configuration.GetValue(typeof(string), "TestReadConfig");
83 //或者这种写法也可以
84 testReadConfig1 = Configuration.GetValue<string>("TestReadConfig");
85
86 //第二种写法
87 var testReadConfig2 = Configuration.GetSection("TestReadConfig").Value;
88
89 /*
90 * 按照关键字直接读取 2种方法 1级目录
91 * "ConnectionStrings": {"Default": "Server=;" }
92 */
93 var connectionStrings1 = Configuration.GetSection("ConnectionStrings").GetChildren().FirstOrDefault()?.Value;//默认取第一个
94 var connectionStrings2 = Configuration.GetSection("ConnectionStrings:Default").Value;//键值对取值
95
96
97 /*
98 键值对读取方法
99 "Student": {
100 "Name": "小明",
101 "Age": 18
102 }
103 */
104 var keyValueName = Configuration.GetSection("Student:Name").Value;
105 var keyValueAge = Configuration.GetSection("Student:Age").Value;
106
107 /*
108 * 组合实体类
109 * "Student": {
110 "Name": "小明",
111 "Age": 18
112 }
113 */
114
115 int age = -99;
116 var student = Configuration.GetSection("Student").GetChildren()
117 .Select(config => new Student()
118 {
119 Name = config["Name"],
120 Age = int.TryParse(config["Age"], out age) == true ? age : age,
121 });
122
123 #region MyRegion
124 /*var studentIConfigurationSectionList = Configuration.GetSection("Student").GetChildren().ToList<IConfigurationSection>();
125 if (studentIConfigurationSectionList !=null && studentIConfigurationSectionList.Count>0)
126 {
127 foreach (var item in studentIConfigurationSectionList)
128 {
129
130 }
131 }*/
132 #endregion
133 }
134
135 private class Student
136 {
137 public string? Name { get; set; }
138 public int? Age { get; set; }
139 }
140 }
141 }
appsettings.json配置文件如下:
1 {
2 "Logging": {
3 "LogLevel": {
4 "Default": "Information",
5 "Microsoft": "Warning",
6 "Microsoft.Hosting.Lifetime": "Information"
7 }
8 },
9
10 //方法1 Configuration.GetValue(typeof(string), "TestReadConfig"); 或者 Configuration.GetValue<string>("TestReadConfig");
11 //方法2 Configuration.GetSection("TestReadConfig").Value;
12 "AllowedHosts": "*",
13 "TestReadConfig": "这是从配置文件读取的关键字为【TestReadConfig】的内容。",
14
15 //方法1 Configuration.GetSection("ConnectionStrings").GetChildren().FirstOrDefault()?.Value;//默认取第一个
16 //方法2 Configuration.GetSection("ConnectionStrings:Default").Value; //键值对取值
17 "ConnectionStrings": {
18 "Default": "Server=;"
19 },
20
21 //组合实体类
22 // int age = -99;
23 // var student = Configuration.GetSection("Student").GetChildren()
24 // .Select(config => new Student()
25 // {
26 //Name = config["Name"],
27 // Age = int.TryParse(config["Age"], out age) == true ? age : age,
28 //});
29 "Student": {
30 "Name": "小明",
31 "Age": 18
32 }
33 }
代码截图如下(图片可能有点小,需要放大来看):
https://files-cdn.cnblogs.com/files/ningxt/ASP.NETCore%E5%85%A5%E9%97%A81%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6_20191225_Ning.ASP.NETCore3.Study.7z