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

.NET 7微服务:使用IOptions模式读取Azure密钥保管库与应用配置

分步实现:.NET7微服务中用IOptions读取Azure App Configuration与Key Vault配置

1. 确认依赖包

确保项目安装以下NuGet包(可通过Package Manager或dotnet CLI安装):

  • Azure.Extensions.AspNetCore.Configuration.AzureAppConfiguration:读取Azure App Configuration
  • Azure.Identity:Azure服务身份认证
  • Microsoft.Extensions.Options.ConfigurationExtensions:支持将配置绑定到强类型对象

dotnet CLI安装命令:

dotnet add package Azure.Extensions.AspNetCore.Configuration.AzureAppConfiguration
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Options.ConfigurationExtensions

2. 配置Program.cs集成Azure服务

在Program.cs中,添加Azure App Configuration的配置,并集成Key Vault(推荐通过App Configuration链接Key Vault,实现统一配置加载):

var builder = WebApplication.CreateBuilder(args);

// 添加Azure App Configuration,同时链接Key Vault
builder.Configuration.AddAzureAppConfiguration(options =>
{
    // 从环境变量或本地配置读取App Configuration连接字符串
    var appConfigConnStr = builder.Configuration["AzureAppConfigurationConnectionString"];
    options.Connect(appConfigConnStr)
           // 使用DefaultAzureCredential进行身份认证,自动适配本地/生产环境
           .ConfigureKeyVault(kv =>
           {
               kv.SetCredential(new DefaultAzureCredential());
           })
           // 可选:筛选需要加载的配置项,比如加载特定前缀的配置
           .Select("MySettings:*", LabelFilter.Null);
});

// 将配置绑定到强类型对象,并注册为IOptions服务
builder.Services.Configure<MySettings>(builder.Configuration.GetSection("MySettings"));

// 其他服务注册...
var app = builder.Build();

// 中间件配置...
app.Run();

说明:

  • DefaultAzureCredential会自动选择合适的认证方式:本地开发优先用Azure CLI/Visual Studio/VS Code的登录身份,生产环境用托管标识。
  • Key Vault中的密钥名称若包含双横线(--),配置系统会自动映射为冒号(:),比如密钥MySettings--ConnectionString会对应MySettings:ConnectionString,和App Configuration的键格式统一。

3. 创建强类型配置类

定义对应配置结构的类,属性名称与配置键的最后一段保持一致:

public class MySettings
{
    // 对应Azure App Configuration中的"MySettings:ApiUrl"
    public string ApiUrl { get; set; } = string.Empty;
    
    // 对应Azure Key Vault中的"MySettings--ConnectionString"
    public string ConnectionString { get; set; } = string.Empty;
    
    // 其他配置项...
}

4. 在业务逻辑中使用IOptions

在控制器或服务中注入IOptions<MySettings>,即可无缝访问配置:

控制器示例:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private readonly MySettings _settings;

    // 注入IOptions<MySettings>
    public WeatherForecastController(IOptions<MySettings> settings)
    {
        _settings = settings.Value;
    }

    [HttpGet]
    public IActionResult Get()
    {
        // 使用配置项
        var apiUrl = _settings.ApiUrl;
        var connStr = _settings.ConnectionString;
        
        return Ok(new { ApiUrl = apiUrl, ConnectionString = connStr });
    }
}

服务类示例:

public class MyBusinessService
{
    private readonly MySettings _settings;

    public MyBusinessService(IOptions<MySettings> settings)
    {
        _settings = settings.Value;
    }

    public void DoBusinessLogic()
    {
        // 使用配置
        Console.WriteLine($"API地址:{_settings.ApiUrl}");
    }
}

关键注意事项

  • 本地开发身份验证:确保已通过az login登录Azure CLI,或Visual Studio/VS Code已关联正确的Azure账号,且账号拥有Azure App Configuration和Key Vault的访问权限(App Configuration Data Reader、Key Vault Secrets User角色)。
  • 生产环境托管标识:在Azure App Service或AKS中部署时,为服务主体/托管标识分配上述必要角色,无需在代码中硬编码密钥。
  • 配置刷新(可选):若需要动态刷新配置,可在AddAzureAppConfiguration中添加ConfigureRefresh配置,配合IConfigurationRefresher实现实时更新。

内容的提问来源于stack exchange,提问作者santosh kumar patro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:17:40