C#怎么读取应用程序的配置文件appsettings.json

来源:APP编程网作者:柬埔寨程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C#怎么读取应用程序的配置文件appsettings.json》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么读取应用程序的配置文件appsettings.json》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,appsettings.json是常用的配置文件格式,无论是ASP.NET Core应用还是.NET控制台应用,都可以通过统一的配置体系读取其中的内容,不需要手动解析JSON字符串。

C#怎么读取应用程序的配置文件appsettings.json

读取前的准备工作

要读取appsettings.json,首先需要引入对应的NuGet包,不同项目类型的依赖略有区别:

  • ASP.NET Core项目默认已经包含了Microsoft.Extensions.Configuration相关依赖,不需要额外安装
  • .NET控制台项目需要手动安装以下三个NuGet包:
    • Microsoft.Extensions.Configuration
    • Microsoft.Extensions.Configuration.Json
    • Microsoft.Extensions.Configuration.Binder

基础读取步骤

1. 创建appsettings.json文件

首先在项目的根目录下创建appsettings.json文件,设置文件的属性为“如果较新则复制”,保证编译后文件会输出到程序运行目录。以下是一个基础的配置文件示例:

{
  "AppName": "配置读取示例应用",
  "MaxConnectionCount": 100,
  "Database": {
    "Server": "127.0.0.1",
    "Port": 3306,
    "UserName": "root",
    "Password": "123456"
  },
  "AllowedHosts": ["localhost", "ipipp.com"]
}

2. 构建配置对象

使用ConfigurationBuilder来加载appsettings.json文件,生成IConfiguration对象,后续所有配置读取都基于这个对象完成。

using Microsoft.Extensions.Configuration;
using System.IO;

// 构建配置
IConfiguration configuration = new ConfigurationBuilder()
    // 设置配置文件所在的基础路径,控制台应用需要指定当前目录,ASP.NET Core可以省略这行
    .SetBasePath(Directory.GetCurrentDirectory())
    // 加载appsettings.json文件,optional表示文件是否可选,reloadOnChange表示文件修改后是否自动重新加载
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

3. 读取配置项

读取配置有两种常用方式,分别是直接通过键路径读取和绑定到自定义实体类读取。

直接通过键路径读取

对于简单配置或者嵌套配置,可以直接使用configuration["键路径"]的方式读取,嵌套配置用冒号分隔层级。

// 读取顶层配置
string appName = configuration["AppName"];
int maxConnectionCount = int.Parse(configuration["MaxConnectionCount"]);

// 读取嵌套配置
string dbServer = configuration["Database:Server"];
int dbPort = int.Parse(configuration["Database:Port"]);
string dbUserName = configuration["Database:UserName"];
string dbPassword = configuration["Database:Password"];

// 读取数组配置
string firstAllowedHost = configuration["AllowedHosts:0"];
string secondAllowedHost = configuration["AllowedHosts:1"];

绑定到实体类读取

如果配置项较多,直接读取键路径的方式不够直观,可以定义和配置结构对应的实体类,通过Bind方法或者Get<T>方法绑定到实例。

首先定义对应的实体类:

public class DatabaseConfig
{
    public string Server { get; set; }
    public int Port { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
}

public class AppConfig
{
    public string AppName { get; set; }
    public int MaxConnectionCount { get; set; }
    public DatabaseConfig Database { get; set; }
    public List<string> AllowedHosts { get; set; }
}

然后绑定配置到实体类实例:

using Microsoft.Extensions.Configuration;

// 绑定整个配置到AppConfig实例
AppConfig appConfig = configuration.Get<AppConfig>();

// 也可以只绑定某个节点到对应的实体类
DatabaseConfig dbConfig = configuration.GetSection("Database").Get<DatabaseConfig>();

// 获取绑定后的配置值
string appName = appConfig.AppName;
string dbServer = appConfig.Database.Server;
List<string> allowedHosts = appConfig.AllowedHosts;

ASP.NET Core中的特殊用法

在ASP.NET Core应用中,配置对象已经被框架自动注入到服务容器,不需要手动构建ConfigurationBuilder,可以直接通过构造函数注入IConfiguration来使用。

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

[ApiController]
[Route("api/config")]
public class ConfigController : ControllerBase
{
    private readonly IConfiguration _configuration;

    // 构造函数注入IConfiguration
    public ConfigController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [HttpGet]
    public IActionResult GetConfig()
    {
        string appName = _configuration["AppName"];
        return Ok(new { AppName = appName });
    }
}

注意事项

  • appsettings.json文件的路径必须正确,控制台应用如果设置了输出目录为bin文件夹,需要确保文件复制到输出目录
  • 读取配置时要注意类型转换,直接读取到的都是字符串类型,需要根据实际需求转换为对应的类型,避免转换异常
  • 如果同时存在appsettings.json和appsettings.Development.json等环境配置文件,框架会自动合并配置,环境相关的配置会覆盖基础配置的内容
  • 如果配置项不存在,直接通过键路径读取会返回null,需要做非空判断避免空引用异常

C#appsettings.jsonConfigurationBuilderIConfigurationASP.NET_Core修改时间:2026-06-28 13:30:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。