在ASP.NET Core应用开发中,配置信息通常存储在appsettings.json等配置文件中,IConfiguration接口是框架提供的用于读取配置的核心组件,几乎所有配置相关的操作都可以通过它完成。默认情况下,ASP.NET Core项目启动时会自动加载appsettings.json以及对应环境的配置文件,无需额外手动配置加载逻辑。

IConfiguration的基础注入与使用
在ASP.NET Core中,IConfiguration已经被默认注册到依赖注入容器中,开发者可以直接在控制器、服务等类中通过构造函数注入的方式获取它的实例。
以下是一个在控制器中注入并使用IConfiguration的简单示例:
using Microsoft.AspNetCore.Mvc;
namespace ConfigDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ConfigController : ControllerBase
{
private readonly IConfiguration _configuration;
// 构造函数注入IConfiguration
public ConfigController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet("basic")]
public string GetBasicConfig()
{
// 读取根节点的配置项
string appName = _configuration["AppName"];
string version = _configuration["Version"];
return $"应用名称:{appName},版本号:{version}";
}
}
}
对应的appsettings.json配置内容如下:
{
"AppName": "配置演示应用",
"Version": "1.0.0",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
读取嵌套配置与数组配置
当配置存在嵌套结构或者数组结构时,需要使用冒号作为分隔符来定位配置节点,数组则通过索引来访问对应元素。
嵌套配置读取
以上面的appsettings.json中的Logging节点为例,读取嵌套的LogLevel配置:
[HttpGet("nested")]
public string GetNestedConfig()
{
// 读取嵌套配置,使用冒号分隔层级
string defaultLogLevel = _configuration["Logging:LogLevel:Default"];
string aspNetCoreLogLevel = _configuration["Logging:LogLevel:Microsoft.AspNetCore"];
return $"默认日志级别:{defaultLogLevel},AspNetCore日志级别:{aspNetCoreLogLevel}";
}
数组配置读取
如果配置文件中存在数组类型的配置,比如:
{
"AllowedIPs": ["127.0.0.1", "192.168.0.1", "ipipp.com"]
}
读取数组配置的方式如下:
[HttpGet("array")]
public List<string> GetArrayConfig()
{
List<string> ipList = new List<string>();
// 遍历数组配置,索引从0开始
int index = 0;
while (true)
{
string ip = _configuration[$"AllowedIPs:{index}"];
if (string.IsNullOrEmpty(ip))
{
break;
}
ipList.Add(ip);
index++;
}
return ipList;
}
配置绑定到实体类
当配置项较多时,逐个读取配置会比较繁琐,此时可以将配置节点绑定到对应的实体类,操作起来更加方便。首先需要定义和配置结构匹配的实体类:
namespace ConfigDemo.Models
{
public class AppSettings
{
public string AppName { get; set; }
public string Version { get; set; }
public LoggingSettings Logging { get; set; }
}
public class LoggingSettings
{
public LogLevelSettings LogLevel { get; set; }
}
public class LogLevelSettings
{
public string Default { get; set; }
public string Microsoft_AspNetCore { get; set; }
}
}
然后可以通过IConfiguration的Get<T>方法或者Bind方法完成绑定:
[HttpGet("bind")]
public AppSettings GetConfigByBind()
{
// 方式1:使用Get方法直接绑定
AppSettings settings1 = _configuration.Get<AppSettings>();
// 方式2:先创建实例再Bind
AppSettings settings2 = new AppSettings();
_configuration.Bind(settings2);
return settings1;
}
如果需要将特定节点绑定到实体,可以指定节点路径:
[HttpGet("bind-section")]
public LoggingSettings GetSectionConfig()
{
// 获取Logging节点并绑定到LoggingSettings实体
LoggingSettings loggingSettings = _configuration.GetSection("Logging").Get<LoggingSettings>();
return loggingSettings;
}
配置热更新与多环境配置
默认情况下,IConfiguration读取的配置是启动时的快照,修改配置文件后不会自动生效。如果需要支持配置热更新,可以在读取配置时使用reloadOnChange参数,不过更常用的方式是通过IOptionsSnapshot<T>或者IOptionsMonitor<T>来实现,这两个接口同样基于IConfiguration,但是支持配置变更监听。
另外,ASP.NET Core支持多环境配置,比如开发环境会加载appsettings.Development.json,生产环境会加载appsettings.Production.json,相同配置项会被环境配置文件覆盖,开发者可以根据需要创建不同环境的配置文件,无需修改代码即可切换配置。
ASP.NET_CoreIConfiguration配置文件读取appsettings.json修改时间:2026-07-05 19:33:22