存储 Azure 函数机密:Startup.Configure 未执行

Storing Azure Function secrets: Startup.Configure is not executed

我有一个 Azure Function 应用程序。秘密存储在 local.settings.json 和 secrets.json:

{
  "Values": {
  "BASIC_AUTH_USERNAME": "<USERNAME>",
  "BASIC_AUTH_PASSWORD": "<PASSWORD>"
  }
}

消费秘钥的Azure函数代码:

        string username = Environment.GetEnvironmentVariable("BASIC_AUTH_USERNAME", EnvironmentVariableTarget.Process);
        string password = Environment.GetEnvironmentVariable("BASIC_AUTH_PASSWORD", EnvironmentVariableTarget.Process);

在这里 https://www.koskila.net/how-to-configure-azure-functions-startup/ 我找到了如何使用启动 class 和配置功能添加 startup.cs 文件:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Configuration;

[assembly: WebJobsStartup(typeof(Startup))]
namespace LATICRETE.IdentityFunctions
{
    public class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            var config = new ConfigurationBuilder()
            .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();
        }
    }
}

但是 GetEnvironmentVariable() 方法 returns 只有 null,而 Startup.Configure() 方法永远不会执行。我错过了什么?

尝试按照以下代码片段更新您的代码;

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Azure.WebJobs.Host.Bindings;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using System.Linq;

[assembly: WebJobsStartup(typeof(LATICRETE.IdentityFunctions.Startup))]
namespace LATICRETE.IdentityFunctions
{
    public class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            var executionContextOptions = builder.Services.BuildServiceProvider().GetService<IOptions<ExecutionContextOptions>>().Value;
            var appDirectory = executionContextOptions.AppDirectory;

            var config = new ConfigurationBuilder()
                .SetBasePath(appDirectory)
                .AddJsonFile("local.settings.json", optional: true, reloadOnChange:true).AddEnvironmentVariables()
                .Build();

            
        builder.Services.Replace(ServiceDescriptor.Singleton(typeof(IConfiguration),
config));
        }
    }
}

并且此代码只会在我们 运行 项目或部署代码时第一次执行。 然后,您可以将 IConfiguration 注入到您想要的 class 中,并且可以从它的实例访问配置设置。

using Microsoft.Extensions.Configuration

public class TestClass{

  private readonly IConfiguration _config;
  
  public TestClass(IConfiguration config)
  {
    _config = config;
  }
  
  public void DoSomeThing()
  {
    var localSettingA = _config["localSettingA"];
  }
}

需要导入 Microsoft.Extensions.Configuration 才能使用 IConfiguration。 敌人的更多信息,看看这篇文章 - https://medium.com/@padala.suresh.ece/loading-keyvault-secrets-and-appsettings-in-to-application-configuration-in-azure-function-apps-c1798a8fd93f