You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ASP.NET Core的appsettings.json生成字典并获取指定环境对象

从appsettings.json转换环境配置为Dictionary并获取活跃环境

问题背景

你的ASP.NET Core Web API的appsettings.json中有如下配置:

{
  "Environments": [
    {
      "Sandbox": {
        "clientID": "",
        "secret": "",
        "adminLoginName": "",
        "apiEndpoint": "",
        "linkURL": ""
      }
    },
    {
      "Development": {
        "clientID": "",
        "secret": "",
        "adminLoginName": "",
        "apiEndpoint": "",
        "linkURL": ""
      }
    },
    {
      "Production": {
        "clientID": "",
        "secret": "",
        "adminLoginName": "",
        "apiEndpoint": "",
        "linkURL": ""
      }
    }
  ],
  "ActiveEnvironment": "Sandbox"
}

对应的Environment类定义:

public class Environment
{
    public string? ClientID { get; set; }
    public string? Secret { get; set; }
    public string? AdminLoginName { get; set; }
    public string? ApiEndpoint { get; set; }
    public string? LinkURL { get; set; }
}

需要将Environments数组转换为Dictionary<string, Environment>,并根据ActiveEnvironment获取对应的配置对象。

解决方案

方法1:适配现有配置结构转换

由于当前Environments是数组,每个元素仅包含一个键值对,需要遍历每个数组元素提取键和配置对象:

using Microsoft.Extensions.Configuration;
using System.Linq;

// 获取Environments配置节点
var environmentsSection = configuration.GetSection("Environments");

// 转换为Dictionary<string, Environment>
var environmentsDict = environmentsSection.GetChildren()
    .ToDictionary(
        // 提取每个数组元素中的唯一键
        section => section.GetChildren().First().Key,
        // 将键对应的配置绑定到Environment对象
        section => section.Get<Dictionary<string, MyAPI.Models.Environment>>().Values.First()
    );

// 获取活跃环境配置
var activeEnvName = configuration["ActiveEnvironment"];
if (environmentsDict.TryGetValue(activeEnvName, out var activeEnvironment))
{
    // 这里可以使用activeEnvironment的配置项
    var clientId = activeEnvironment.ClientID;
}

方法2:修改配置结构简化转换

如果可以调整appsettings.json的结构,将Environments从数组改为直接的字典结构,绑定会更简洁:
修改后的appsettings.json:

{
  "Environments": {
    "Sandbox": {
      "clientID": "",
      "secret": "",
      "adminLoginName": "",
      "apiEndpoint": "",
      "linkURL": ""
    },
    "Development": {
      "clientID": "",
      "secret": "",
      "adminLoginName": "",
      "apiEndpoint": "",
      "linkURL": ""
    },
    "Production": {
      "clientID": "",
      "secret": "",
      "adminLoginName": "",
      "apiEndpoint": "",
      "linkURL": ""
    }
  },
  "ActiveEnvironment": "Sandbox"
}

此时直接绑定为字典:

var environmentsDict = configuration.GetSection("Environments")
    .Get<Dictionary<string, MyAPI.Models.Environment>>();

var activeEnvironment = environmentsDict[configuration["ActiveEnvironment"]];

内容的提问来源于stack exchange,提问作者SiBrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:47:02