ASP.NET Core 中的配置
.NET Core 定义配置的方式不同于之前 NET 版本,之前是依赖于 System.Configuration 的 app.config 和 XML 配置文件 web.config。 新的配置系统更加轻量级,并且具有更好的扩展性,其最大的特点就是支持多样化的数据源。我们可以采用文件格式(INI、JSON 或 XML),也可以使用内存的变量作为配置的数据源,或直接配置定义在持久化的文件甚至数据库中。
以键-值对的形式读取配置
新建一个 ASP .NET Core Web 应用程序,修改appsettings.json为:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"option1": "value1_from_json",
"option2": 2,
"subsection": {
"suboption1": "subvalue1_from_json",
"suboption2": "subvalue2_from_json"
},
"wizards": [
{
"Name": "Gandalf",
"Age": "1000"
},
{
"Name": "Harry",
"Age": "17"
}
],
"EnvConfig": "Production"
}
在ConfigureServices方法里面添加如下测试代码:
//直接访问,节点由冒号(:)分隔
var option1 = Configuration["option1"];
var suboption1 = Configuration["subsection:suboption1"];
var wizards_0 = Configuration["wizards:0:Name"];
Console.WriteLine($"option1: {option1}");
Console.WriteLine($"subsection:suboption1: {suboption1}");
Console.WriteLine($"wizards:0:Name: {wizards_0}");
查看输出:
TestConfigration> option1: value1_from_json
TestConfigration> subsection:suboption1: subvalue1_from_json
TestConfigration> wizards:0:Name: Gandalf
多环境配置
修改更改appsettings.Development.json为:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"EnvConfig": "Development"
}
注意EnvConfig的配置值为Development。
在ConfigureServices方法里面添加如下测试代码:
//多环境配置
var envConfig = Configuration["EnvConfig"];
Console.WriteLine($"EnvConfig: {envConfig}");
Debug执行获取的是appsettings.Development.json里面的值,输出
EnvConfig: Development
直接执行获取的是appsettings.json里面的值,输出
EnvConfig: Production
多坏境配置文件获取代码位于Program类中的WebHost.CreateDefaultBuilder方法里:
IHostingEnvironment hostingEnvironment = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
读取结构化的配置数据
添加一个类 TestSubSectionConfig 对应于配置文件中的 subsection 节点
public class TestSubSectionConfig
{
public string SubOption1 { get; set; }
public string SubOption2 { get; set; }
}
在ConfigureServices方法里面添加如下测试代码:
//使用GetSection解析配置文件的节
var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>();
var suboption2 = subsectionOptions.SubOption2;
Console.WriteLine($"subsection:suboption2: {suboption2}");
查看输出:
subsection:suboption2: subvalue2_from_json
如果需要在Controller里面使用,可以通过依赖注入的方式:
在ConfigureServices里面注册配置项。
public void ConfigureServices(IServiceCollection services)
{
//注册配置到服务容器
services.Configure<TestSubSectionConfig>(Configuration.GetSection("subsection"));
//var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>();
//services.Configure<TestSubSectionConfig>(options =>
//{
// options.SubOption1 = subsectionOptions["suboption1"];
// options.SubOption2 = subsectionOptions["suboption2"];
// });
}
在Controller里面读取:
public class HomeController : Controller
{
private TestSubSectionConfig _subSectionConfig;
private ILogger<HomeController> _logger;
public HomeController(IOptions<TestSubSectionConfig> option, ILogger<HomeController> logger)
{
_subSectionConfig = option.Value;
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation($"SubOption1: {_subSectionConfig.SubOption1}");
_logger.LogInformation($"SubOption2: {_subSectionConfig.SubOption2}");
return View();
}
}
查看输出:
TestConfigration.Controllers.HomeController:Information: SubOption1: subvalue1_from_json
TestConfigration.Controllers.HomeController:Information: SubOption2: subvalue2_from_json
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端