跟着官网学ASP.NET Core 6.0之读取配置文件

开发 前端
在ASP.NET Core 6.0中,默认配置文件是appsettings.json,该文件存储的内容为JSON格式的字符串,我们一般都将程序的配置放在这个文件里面,提供给程序使用,那么我们该如何操作呢?

在ASP.NET Core 6.0中,默认配置文件是appsettings.json,该文件存储的内容为JSON格式的字符串,我们一般都将程序的配置放在这个文件里面,提供给程序使用,那么我们该如何操作呢?

ASP.NET Core默认加载顺序是appsettings.json->

appsettings.Environment.json,它会根据当前的运行环境去加载不同的配置文件,最后

appsettings.Environment.json 值将替代 appsettings.json 中的值,如果没有多个值,则取默认值。

在开始之前,我们先在appsettings.json中新增一些配置信息

"Wechat": {
"AppId": "wx26c607c55f31745e",
"AppSecret": "e7da82499266ca3fdf85290f68f8fd3a"
}

简单读取配置

现在我们就尝试读取配置文件中AppId和AppSecret的值,在Program.cs中,我们直接可以用WebApplicationBuilder里面的Configuration属性来读取,取配置内容的方式有很多,比如:

string appId = builder.Configuration.GetSection("Wechat")["AppId"];
string appSecret = builder.Configuration.GetSection("Wechat")["AppSecret"];

还可以这样

string appId1 = builder.Configuration["Wechat:AppId"];
string appSecret1 = builder.Configuration["Wechat:AppSecret"];

当然,它还可以更深的层级,如:builder.Configuration["

AppConfig:Wechat:AppSecret"]

如果我们想在非Program.cs里面读取配置,则需要注入IConfiguration实例,其他操作方式便和前面的一致,我们还在来实践一次,这里我先新建一个Controller

[Route("api/[controller]")]
[ApiController]
public class ConfigurationController : ControllerBase
{
private readonly IConfiguration Configuration;

public ConfigurationController(IConfiguration configuration) {
Configuration = configuration;
}

[HttpGet]
public string ReadConfig()
{
return Configuration["Wechat:AppId"];
}
}

我们直接访问api/Configuration,便能返回配置文件中的AppId信息,

配置绑定到实体

如果配置文件比较复杂,我们依然用前面的方式一个个的去取值,那确实有些繁琐,所以,我们需要更高端的操作,直接把配置内容装载到实体类中,这我新建一个名为WechatConfiguration的类,里面加入与配置文件对应的属性

public class WechatConfiguration
{
public const string KEY = "Wechat";

public string AppId { get; set; } = String.Empty;
public string AppSecret { get; set; } = String.Empty;
}

这里,我们需要使用的IConfiguration的GetSection方法来获取指定节点的内容,然后使用Get将内容序列化为对象,看例子

Configuration.GetSection(WechatConfiguration.KEY).Get<WechatConfiguration>();

除了使用Get取值,还可使用Bind方法,将值绑定到对象上

WechatConfiguration wechatConfiguration = new WechatConfiguration();
Configuration.GetSection(WechatConfiguration.KEY).Bind(wechatConfiguration);

这两种方式都能获取到配置文件修改后的内容,除了上面两种方式获取配置内容外,还可以使用直接将配置对象注入到容器中,

builder.Services.Configure<WechatConfiguration>(builder.Configuration.GetSection(WechatConfiguration.KEY));

然后在需要使用的类中注入IOptions,通过其Value属性来获取配置类对象

public class ConfigurationController : ControllerBase
{
private readonly IConfiguration Configuration;
private readonly WechatConfiguration wechat;

public ConfigurationController(IConfiguration configuration, IOptions<WechatConfiguration> options)
{
Configuration = configuration;
wechat = options.Value;
}
}

如果配置类过多,那么在Program.cs便会显得杂乱臃肿,所以,我们可以将其移动到扩展方法以注册服务,这里新建一个扩展类

ConfigServiceCollectionExtensions,将前面的代码移动到该类中

public static class ConfigServiceCollectionExtensions
{
public static IServiceCollection AddConfig(this IServiceCollection services, IConfiguration config)
{
services.Configure<WechatConfiguration>(config.GetSection(WechatConfiguration.KEY));
return services;
}
}

然后在Program.cs中添加引用即可

builder.Services.AddConfig(builder.Configuration);

配置文件读取就先了解这么,明天就要开始上班了,又要忙起来了,后面有时间再继续学习ASP.NET Core 中的路由。


责任编辑:武晓燕 来源: 今日头条
相关推荐

2024-03-15 11:35:11

配置文件应用程序开发

2018-08-20 08:03:46

跨平台 Web操作系统

2009-07-21 10:05:10

ASP.NET配置文件

2009-08-05 10:57:17

ASP.NET配置文件配置文件格式

2009-07-29 14:23:08

ASP.NET配置文件

2022-02-09 07:52:36

GolangGo语言

2021-02-19 06:54:33

配置系统ASP.NET Cor

2011-04-19 14:35:58

ASP.NETWeb.config

2009-08-05 11:16:26

ASP.NET配置文件

2021-10-19 10:42:00

MVCAPI.NET

2023-07-04 08:26:15

2009-07-28 17:17:19

ASP.NET概述

2009-08-13 15:49:18

ASP.NET性能优化

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计

2023-07-03 08:48:40

Web模块化设计

2009-07-20 17:27:01

配置ASP.NET

2021-03-12 00:04:52

网关Api

2009-08-03 13:38:18

ASP.NET编程模型

2009-07-20 10:16:13

配置ASP.NET A

2021-01-31 22:56:50

FromServiceASP
点赞
收藏

51CTO技术栈公众号