c# - .NET Core - 能够连接到 Azure 应用程序配置但无法返回任何配置值?

标签 c# azure .net-core azure-functions

我有一个 .NET Core Azure Function 应用程序,我正在其中连接到 Azure 应用程序配置服务并注册 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 门户看到它正在接收请求,但我无法让它实际返回任何配置值。这是配置注入(inject)到函数后的样子:

enter image description here

我知道应用程序配置服务中有 3 个配置值,但它不返回任何数据,而且我看不到它失败的地方。据我所知,不存在身份验证问题,并且我已经使用相同的方法在不同的项目中成功实现了这一点。

有趣的是,如果我尝试通过 Azure 应用程序配置客户端库 检索 key ,我会在 GetConfigurationSetting 方法上收到以下 404 错误。我很难理解它为什么看不到我的任何配置设置。

enter image description here

最佳答案

从评论来看,您需要做两件事:

  1. 如果您使用标签,则需要在配置应用程序时为其添加过滤器。
  2. 如果您使用的是 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;
        }
    }
}

关于c# - .NET Core - 能够连接到 Azure 应用程序配置但无法返回任何配置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68023186/

相关文章:

azure - 是否可以在没有azure平台的情况下创建聊天机器人(使用microsoft bot平台和luis)

c# - 为什么 ILogger 不记录到 Azure 应用程序见解?

c# - 为什么在使用对象池并尝试将对象放在地形上的随机位置时它不是随机的?

c# - IIS7 URL Rewrite 为 WCF 请求返回 404(反向代理)

azure - 将应用程序从一个云传输到另一个云

json - 网站创建失败,找不到服务器场 Azure Powershell

c# - 从 .net core 自定义日志记录到应用程序见解

c# - .NET Core 项目引用问题 - "Cannot find project info for ' XXX.csproj'”

C# 林奇。按对象名称属性或名称部分搜索对象

c# - 在 C# 中保存固定数量数据的最佳类