读取appsettings.json

先给出appsettings.json的参考结构,将以读取redis节点数据为例

复制代码
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  //Redis服务配置
  "Redis": {
    "Default": {
      "Connection": "127.0.0.1:6379",
      "InstanceName": "local",
      "DefaultDB": 0
    }
  }
}
复制代码

 

方法1:供Program.cs调用

string connection = "";
IConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json");
IConfigurationRoot configRoot = configBuilder.Build();
connection = configRoot.GetSection("Redis:Default:Connection").Value;
Redis.RedisInit.RedisInitialization(Redis.RedisInit.RedisClientType.CSRedisCore,$"{connection},defaultDatabase=0,idleTimeout=3000,poolsize=5,prefix=");
builder.Services.AddSingleton<Redis.IRedisAccess, Redis.CSRedisAccess>();

方法2:供Program.cs调用,包装成对象

复制代码
namespace CSRedisCoreDemo
{
    public class DBConfig
    {
        public string Connection { get; set; }
        public string InstanceName { get; set; }
        public int DefaultDB { get; set; }
    }
}
复制代码
string connection = "";
IConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json");
IConfigurationRoot configRoot = configBuilder.Build();
DBConfig? db = configRoot.GetSection("Redis:Default").Get<DBConfig>();
connection = db?.Connection ?? "";
Redis.RedisInit.RedisInitialization(Redis.RedisInit.RedisClientType.CSRedisCore,$"{connection},defaultDatabase=0,idleTimeout=3000,poolsize=5,prefix=");
builder.Services.AddSingleton<Redis.IRedisAccess, Redis.CSRedisAccess>();

方法3:供控制器调用,部分包装成对象,仅能访问指定配置节

复制代码
namespace CSRedisCoreDemo
{
    public class DBConfig
    {
        public string Connection { get; set; }
        public string InstanceName { get; set; }
        public int DefaultDB { get; set; }
    }
}
复制代码
namespace CSRedisCoreDemo
{
    public class Log
    {
        public string Default { get; set; }
    }
}
IConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json");
IConfigurationRoot configRoot = configBuilder.Build();
builder.Services.Configure<DBConfig>(configRoot.GetSection("Redis:Default"))
                .Configure<Log>(configRoot.GetSection("Logging:LogLevel"));
复制代码
    [ApiController]
    [Route("[controller]")]
    public class StringController : ControllerBase
    {
        private IOptions<DBConfig> _options;
        private IOptions<Log> _optionslog;
        public StringController(IOptions<DBConfig> options, IOptions<Log> optionslog)
        {
            _options = options;
            _optionslog = optionslog;
        }
        [Route("/test")]
        [HttpGet()]
        public void Test()
        {
            Console.WriteLine($"{_options.Value.Connection},{_optionslog.Value.Default}");
            
        }
}
复制代码

方法3:供控制器调用,提供所有配置节,不包装成对象

string connection = "";
IConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json");
IConfigurationRoot configRoot = configBuilder.Build();
builder.Services.AddSingleton(configRoot);
复制代码
    [ApiController]
    [Route("[controller]")]
    public class StringController : ControllerBase
    {
        private readonly IConfigurationRoot _settings;//配置文件注入
        public StringController(IConfigurationRoot settings,)
        {
            _settings = settings;
        }
        [Route("/test")]
        [HttpGet()]
        public void Test()
        {
            //获取配置文件信息
            Console.WriteLine($"{_settings.GetSection("AllowedHosts").Value}");
        }
}
复制代码

 配置文件不仅有json格式,还有命令行格式和系统变量等形式,分别对应不同的应用场景。

切勿将配置文件上传到GitHub,以免泄露数据造成损失。之前有丢失开房信息、机密信息等案例。

posted @   土豆365  阅读(268)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示