.NET Core - 能够连接到 Azure App Config 但不能 return 任何配置值?
.NET Core - Able to connect to Azure App Config but can't return any config values?
我有一个 .NET Core Azure Function 应用程序,我正在其中连接到 Azure App Config 服务并注册 Key Vault 连接:
using Azure.Identity;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using System;
[assembly: FunctionsStartup(typeof(Func.Accounts.Api.Startup))]
namespace Func.Accounts.Api
{
public class Startup : FunctionsStartup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
string connectionString = Environment.GetEnvironmentVariable("AppConfigConnectionString");
builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
{
options.Connect(connectionString)
.ConfigureKeyVault(kv =>
{
kv.SetCredential(new DefaultAzureCredential());
});
});
}
public override void Configure(IFunctionsHostBuilder builder)
{
}
}
}
我可以很好地连接到该服务,而且我可以通过 Azure 门户看到它正在接收请求,但是我实际上无法将其设置为 return 任何配置值。这是将配置注入函数后的样子:
我知道 App Config Service 中有 3 个配置值,但它没有 return 任何数据,我看不出它在哪里失败。据我所知,不存在身份验证问题,我已经在不同的项目中使用相同的方法成功实现了这一点。
有趣的是,如果我尝试通过 Azure App Configuration client library
检索密钥,我会在 GetConfigurationSetting
方法上收到以下 404
错误。我很难理解它为什么看不到我的任何配置设置。
从评论来看,您似乎需要做两件事:
- 如果您使用标签,则需要在配置应用程序时为它们添加过滤器。
- 如果您使用的是 Azure Key Vault,请确保您 grant access to your App Configuration
下面是使用标签加载配置的示例。
[assembly: FunctionsStartup(typeof(Host.Example.Startup))]
namespace Host.Example
{
public partial class Startup : FunctionsStartup
{
public IConfiguration Configuration { get; set; }
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
var config = builder.ConfigurationBuilder.Build();
var appConfigConnection = config.GetConnectionString("AppConfig");
// Here the label is the environment name
var environment = Environment.GetEnvironmentVariable("Environment");
builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
{
// Load the configuration using labels
// Connect it to the Key Vault. Didn't test the Key Vault code but it should work if configured properly
options.Connect(appConfigConnection)
.Select(KeyFilter.Any, environment.ToLowerInvariant())
.ConfigureKeyVault(kv =>
{
kv.SetCredential(new DefaultAzureCredential());
});
});
}
public override void Configure(IFunctionsHostBuilder builder)
{
Configuration = builder.GetContext().Configuration;
}
}
}
我有一个 .NET Core Azure Function 应用程序,我正在其中连接到 Azure App Config 服务并注册 Key Vault 连接:
using Azure.Identity;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using System;
[assembly: FunctionsStartup(typeof(Func.Accounts.Api.Startup))]
namespace Func.Accounts.Api
{
public class Startup : FunctionsStartup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
string connectionString = Environment.GetEnvironmentVariable("AppConfigConnectionString");
builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
{
options.Connect(connectionString)
.ConfigureKeyVault(kv =>
{
kv.SetCredential(new DefaultAzureCredential());
});
});
}
public override void Configure(IFunctionsHostBuilder builder)
{
}
}
}
我可以很好地连接到该服务,而且我可以通过 Azure 门户看到它正在接收请求,但是我实际上无法将其设置为 return 任何配置值。这是将配置注入函数后的样子:
我知道 App Config Service 中有 3 个配置值,但它没有 return 任何数据,我看不出它在哪里失败。据我所知,不存在身份验证问题,我已经在不同的项目中使用相同的方法成功实现了这一点。
有趣的是,如果我尝试通过 Azure App Configuration client library
检索密钥,我会在 GetConfigurationSetting
方法上收到以下 404
错误。我很难理解它为什么看不到我的任何配置设置。
从评论来看,您似乎需要做两件事:
- 如果您使用标签,则需要在配置应用程序时为它们添加过滤器。
- 如果您使用的是 Azure Key Vault,请确保您 grant access to your App Configuration
下面是使用标签加载配置的示例。
[assembly: FunctionsStartup(typeof(Host.Example.Startup))]
namespace Host.Example
{
public partial class Startup : FunctionsStartup
{
public IConfiguration Configuration { get; set; }
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
var config = builder.ConfigurationBuilder.Build();
var appConfigConnection = config.GetConnectionString("AppConfig");
// Here the label is the environment name
var environment = Environment.GetEnvironmentVariable("Environment");
builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
{
// Load the configuration using labels
// Connect it to the Key Vault. Didn't test the Key Vault code but it should work if configured properly
options.Connect(appConfigConnection)
.Select(KeyFilter.Any, environment.ToLowerInvariant())
.ConfigureKeyVault(kv =>
{
kv.SetCredential(new DefaultAzureCredential());
});
});
}
public override void Configure(IFunctionsHostBuilder builder)
{
Configuration = builder.GetContext().Configuration;
}
}
}