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

如何在ASP.NET Core的Local环境加载secrets.json而非Development环境

解决Local环境无法加载secrets.json的问题

问题背景

我们使用Azure App Configuration和Azure Key Vault管理配置,原有Development、QA、Staging、Production四个环境,现新增Local环境作为本地开发环境替代原Development的本地角色,但secrets.json仅在Development环境加载,Local环境的配置源中缺少该文件的加载项。

对比配置源:

  • Local环境配置源(无secrets.json):
    builder.Sources = ConfigurationManager.ConfigurationSources
      [0] = MemoryConfigurationSource
      [1] = EnvironmentVariablesConfigurationSource
      [2] = EnvironmentVariablesConfigurationSource
      [3] = JsonConfigurationSource ("appsettings.json")
      [4] = JsonConfigurationSource ("appsettings.Local.json")
      [5] = EnvironmentVariablesConfigurationSource
      [6] = ChainedConfigurationSource
    
  • Development环境配置源(包含secrets.json):
    builder.Sources = ConfigurationManager.ConfigurationSources
      [0] = MemoryConfigurationSource
      [1] = EnvironmentVariablesConfigurationSource
      [2] = EnvironmentVariablesConfigurationSource
      [3] = JsonConfigurationSource ("appsettings.json") 
      [4] = JsonConfigurationSource ("appsettings.Development.json")
      [5] = JsonConfigurationSource ("secrets.json")  
      [6] = EnvironmentVariablesConfigurationSource
      [7] = ChainedConfigurationSource
    

根据官方规则,用户密钥secrets.json默认仅在Development环境自动加载,需修改配置逻辑让Local环境也加载该文件。


解决方案

1. 显式扩展用户密钥加载的环境范围

在Program.cs(或Startup.cs的配置初始化代码)中,修改配置构建逻辑,让Local环境和Development环境一样触发用户密钥加载:

var environment = builder.Environment;

// 加载基础配置文件
builder.Configuration
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: true, reloadOnChange: true);

// 为Local和Development环境加载用户密钥
if (environment.IsDevelopment() || environment.IsEnvironment("Local"))
{
    // 替换为你的程序集入口类型(如Program或Startup)
    builder.Configuration.AddUserSecrets<Program>();
}

// 继续添加Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(logger, "你的Azure App Configuration端点");

2. 验证配置源

修改后,Local环境的配置源会新增JsonConfigurationSource ("secrets.json")项,结构与Development环境一致,确保secrets.json被正确加载。

3. 适配现有Azure缓存逻辑

你提供的ConfigurationBuilderExtensions扩展方法中,GetAzureAppConfiguration会自动检测配置源中的secrets.json是否存在,只要配置源包含该文件,就会触发后续的Azure配置缓存逻辑,无需修改扩展方法代码。


额外说明

  • AddUserSecrets会自动查找项目对应的用户密钥文件(默认路径为%APPDATA%\Microsoft\UserSecrets\<用户密钥ID>\secrets.json),无需手动指定路径,保证密钥的安全隔离存储。
  • 如果需要自定义secrets.json路径,可改用AddJsonFile手动添加:
    if (environment.IsEnvironment("Local"))
    {
        builder.Configuration.AddJsonFile("secrets.json", optional: true, reloadOnChange: true);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:14:55