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

.NET 7 Web API配置:从Azure配置读取设置,仅本地用appsettings.json

实现.NET 7 Web API从Azure App Configuration读取配置(本地保留appsettings.json)

需求说明

我有一个.NET 7 Web API项目,希望切换为从Azure App Configuration读取应用设置,替代传统的appsettings.json文件。核心原因是用Azure Key Vault安全存储敏感配置(如数据库连接字符串、API密钥),通过Azure App Configuration的@Microsoft.KeyVault(SecretUri={SecretURL})语法可直接引用Key Vault中的机密。目前项目仅从appsettings.json加载配置,需要调整实现:非本地环境使用Azure App Configuration,本地运行时仍沿用appsettings.json。

原有代码参考

ConfigurationExtensions类

public static class ConfigurationExtensions
{
    public static IConfigurationBuilder AddAppConfiguration(this IConfigurationBuilder configurationBuilder, IWebHostEnvironment hostingEnvironment)
    {
        configurationBuilder
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

        // For Localhost, we're using appsettings.json file, it will not be overridden when running on Localhost
        if (!hostingEnvironment.IsEnvironment("Localhost"))
        {
            configurationBuilder.AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
            
        }
        configurationBuilder.AddEnvironmentVariables();
        return configurationBuilder;
    }
}

Program.cs代码

var builder = WebApplication.CreateBuilder(args);
{
    // Environment configuration
    var configuration = builder.Configuration;
    var env = builder.Environment;

    configuration.AddAppConfiguration(env);

    builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Program>());
    builder.Services.AddHttpClient();

    builder.Services.AddApplication();
    builder.Services.AddInfrastructure(builder.Configuration);

    builder.Services.AddHelpers();

    builder.Services.AddControllers()
       // Configures the JSON serialization options for controllers.
       .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });

    builder.Services.Configure<ApiBehaviorOptions>(options =>
    {
        options.SuppressModelStateInvalidFilter = true;
    });

}

var app = builder.Build();
{
    app.UseHttpsRedirection();

    // Authentication & Authorization
    app.UseAuthentication();
    app.UseAuthorization();
    app.MapControllers();

    app.UseRouting();
    app.UseSwaggerWithVersioning();
}

if (app.Environment.IsDevelopment())
{
    //DEV configurations
}

app.Run();

修改步骤

1. 安装依赖NuGet包

需要添加Azure App Configuration和身份验证相关的包:

Install-Package Microsoft.Extensions.Configuration.AzureAppConfiguration
Install-Package Azure.Identity

Azure.Identity用于自动处理身份验证:部署到Azure时使用托管标识,本地开发时自动适配Azure CLI、Visual Studio等已登录的身份。

2. 更新ConfigurationExtensions类

修改配置扩展方法,在非本地环境加入Azure App Configuration加载逻辑,同时保留本地的appsettings.json使用:

public static class ConfigurationExtensions
{
    public static IConfigurationBuilder AddAppConfiguration(this IConfigurationBuilder configurationBuilder, IWebHostEnvironment hostingEnvironment)
    {
        // 本地环境仅加载基础appsettings.json
        configurationBuilder
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

        if (!hostingEnvironment.IsEnvironment("Localhost"))
        {
            // 非本地环境加载对应环境的配置文件
            configurationBuilder.AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
            
            // 从已加载的配置中读取Azure App Configuration连接字符串
            var config = configurationBuilder.Build();
            var appConfigConnString = config.GetConnectionString("AzureAppConfiguration");
            
            // 添加Azure App Configuration支持,并启用Key Vault引用解析
            configurationBuilder.AddAzureAppConfiguration(options =>
            {
                options.Connect(appConfigConnString)
                       .ConfigureKeyVault(kvOptions =>
                       {
                           kvOptions.SetCredential(new DefaultAzureCredential());
                       });
            });
        }
        
        configurationBuilder.AddEnvironmentVariables();
        return configurationBuilder;
    }
}

3. 配置Azure App Configuration连接字符串

在非本地环境的配置文件(如appsettings.Production.json)中添加连接字符串,避免硬编码:

{
  "ConnectionStrings": {
    "AzureAppConfiguration": "你的Azure App Configuration实例连接字符串"
  }
}

本地环境的appsettings.json无需添加此配置,因为本地不会触发Azure App Configuration的加载。

4. Azure部署权限配置

  • 给部署的Azure服务(如App Service)启用系统分配托管标识
  • 给该托管标识分配Azure App Configuration的"数据读取者"角色,以及Key Vault的"机密读取者"角色,确保能正常读取配置和解析Key Vault引用

验证逻辑

  • 本地运行(环境为"Localhost"):仅加载appsettings.json,保持原有开发流程
  • Azure环境运行:先加载对应环境的appsettings文件,再从Azure App Configuration读取配置,并自动解析Key Vault中的机密引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:35:43