gpt4 book ai didi

使用应用程序设置 json 的 Azure Function 2.0

转载 作者:行者123 更新时间:2023-12-03 05:39:25 31 4
gpt4 key购买 nike

我正在尝试遵循允许 azure 函数 (v2) 针对每个环境(开发、测试、阶段、产品)使用应用程序设置 json 文件的指导。

方法 1 - 使用 ExecutionContext基于此article ,我尝试了以下代码。这些设置永远不会从已发布代码中包含的 local.settings.json 返回。

    [FunctionName("ScheduleApp")]
public async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
log.LogInformation($"ScheduleApp triggered...");

try
{
var configurationBuilder = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var y = configurationBuilder.GetConnectionStringOrSetting("somesetting");
var x = configurationBuilder["test"];
log.LogInformation($"x = {x}, y = {y});
}
catch (Exception ex)
{
log.LogInformation($"exception = {ex.Message}");
}

方法 2 - 使用startup.cs ConfigurationBuilder
FunctionOptions.cs 是我编写的一个类,它是一组与 local.settings.json 文件 Values 集合中的配置相匹配的属性。此类的 IOptionsMonitor 在如下所示的 azure 函数的构造函数中传递。此方法也不会返回 json 文件中的值。

Startup.cs...

    public override void Configure(IFunctionsHostBuilder builder)
{
var configurationBuilder = new ConfigurationBuilder();

var descriptor = builder.Services.FirstOrDefault(d => d.ServiceType == typeof(IConfiguration));
if (descriptor?.ImplementationInstance is IConfigurationRoot configuration)
{
configurationBuilder.AddConfiguration(configuration);
}
Configuration = configurationBuilder.Build();

builder.Services.AddOptions<FunctionOptions>();
builder.Services.Configure<FunctionOptions>(Configuration);
builder.Services.Configure<FunctionOptions>(Configuration.GetSection("Values"));
}

ScheduleApp.cs...

    public ScheduleApp(IConfiguration configuration, IOptionsMonitor<FunctionOptions> optionsAccessor)
{
_functionOptions = optionsAccessor.CurrentValue;
_configuration = configuration;
}

[FunctionName("ScheduleApp")]
public async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
log.LogInformation($"ScheduleApp triggered...");

try
{
var z = "";
if (_functionOptions != null)
z = _functionOptions.somesetting;
else
log.LogInformation("_funcionsOption is null");

log.LogInformation($"_funcionsOption = {z}");
}
catch (Exception ex)
{
log.LogInformation($"_funcionsOption exception, ex={ex.Message}");
}

这两种方法都不会产生配置值。我尝试将 .json 文件添加为 azure 函数中的内容。我使用了环境变量 AZURE_FUNCTIONS_ENVIRONMENT,因为我预计这将控制使用哪组设置(按环境)。什么都不起作用。

我一定错过了什么。有人可以指出我所缺少的内容或任一方法的工作 c# 示例吗?理想情况下,它还会展示如何管理每个环境设置,如

  • appsettings.dev.json
  • appsettings.test.json
  • appsettings.stage.json
  • appsettings.prod.json

最佳答案

重写 FunctionStartup 类 ( https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources ) 中的 ConfigureAppConfiguration 方法。

以下示例通过添加用户 secret ,使文档中提供的示例更进一步。

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
FunctionsHostBuilderContext context = builder.GetContext();

builder.ConfigurationBuilder
.SetBasePath(context.ApplicationRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
.AddJsonFile($"appsettings.{context.EnvironmentName}.json", optional: true, reloadOnChange: false)
.AddUserSecrets(Assembly.GetExecutingAssembly(), true, true)
.AddEnvironmentVariables();
}

默认情况下,appsettings.json 等配置文件不会自动复制到 Azure Function 输出文件夹。请务必查看文档 ( https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources ) 以了解对 .csproj 文件的修改。另请注意,由于该方法附加现有提供程序的方式,因此必须始终以 .AddEnvironmentVariables() 结尾。

有关 Azure Function 中的配置的更深入讨论可以在 Using ConfigurationBuilder in FunctionsStartup 中找到。

关于使用应用程序设置 json 的 Azure Function 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59903965/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com