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

.NET 6无法从Azure应用配置读取值并映射到强类型类对象

问题:Azure App Configuration配置无法映射到强类型DBSettings对象

已在Azure中创建Azure App Configuration服务并添加相关配置,在.NET 6 Web应用中尝试通过IOptions读取该服务配置并映射到强类型DBSettings对象,但控制器中的settings对象始终为null。使用本地appsettings.json配置时可正常映射。

相关代码

Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddAzureAppConfiguration(option =>
{
    option.Connect("myconnectionstring")
   .ConfigureRefresh(refresh =>
   {
    refresh.Register("AppSettings:Sentinel", "Development", refreshAll: true)
                       .SetCacheExpiration(new TimeSpan(0, 0, 10));
   });

}, optional: false);   

builder.Services.Configure<DBSettings>(builder.Configuration.GetSection("AppSettings:DBSettings"));
builder.Services.AddAzureAppConfiguration();


var app = builder.Build();
app.UseAzureAppConfiguration();
app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=home}/{action=privacy}/{id?}");

app.Run(); 

DBSettings.cs

public class DBSettings
{
    public string ConnectionString { get; set; }
    public int DapperTimeout { get; set; }
}    

AccountController.cs

public class AccountController : BaseController
{
    private readonly DBSettings settings;
    public AccountController(IOptions<DBSettings> options)
    {
        settings = options.Value;
    }    
    public async Task<IActionResult> AuthCallback()
    {
        var gg = settings.ConnectionString;
    }
}    

本地appsettings.json(可正常工作)

{
  "AppSettings": {
    "DBSettings": {
      "ConnectionString": "Server=tcp:aimoves-dev.database.windows.net,1433;Initial Catalog=AiMoves_Dev;Persist Security Info=False;User ID=itservices@aimoves.co.uk@aimoves-dev;Password=PtotheWorld@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
      "DapperTimeout": "200"
    }
  }
}

解决方案

1. 检查Azure App Configuration中的键名匹配

确保Azure配置中的键完全对应代码中的层级:

  • 键名应为AppSettings:DBSettings:ConnectionString和AppSettings:DBSettings:DapperTimeout
  • Azure App Configuration的键名区分大小写,需与代码中的配置节名称严格一致

2. 验证Azure App Configuration连接字符串

确认AddAzureAppConfiguration中使用的连接字符串是Azure App Configuration的只读密钥或读写密钥,无拼写错误。可以在Azure门户的App Configuration实例中复制正确的连接字符串。

3. 排除配置刷新逻辑的影响

代码中注册了AppSettings:Sentinel作为刷新哨兵键,如果该键在Azure中不存在,可能导致配置加载异常。可以先注释掉ConfigureRefresh部分,测试是否能正常加载配置:

builder.Configuration.AddAzureAppConfiguration("myconnectionstring");

如果测试正常,再检查哨兵键是否存在,或调整刷新配置。

4. 调试验证配置是否加载

在builder.Build()前添加调试代码,确认Azure配置是否被读取到:

var dbSettingsSection = builder.Configuration.GetSection("AppSettings:DBSettings");
Console.WriteLine($"ConnectionString: {dbSettingsSection["ConnectionString"]}");
Console.WriteLine($"DapperTimeout: {dbSettingsSection["DapperTimeout"]}");
  • 如果控制台无输出,说明配置未从Azure加载,需检查连接和键名
  • 如果有输出,说明DI绑定环节有问题,可检查Configure<DBSettings>的调用顺序(必须在AddAzureAppConfiguration之后)

5. 确认配置值类型匹配

DBSettings中的DapperTimeout是int类型,确保Azure中设置的是数值(如200)而非字符串"200",类型不匹配会导致属性绑定失败(但不会导致整个对象为null,此点用于排查部分属性为空的情况)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:48:18