ASP.NET Core 应用程序中的 azure 应用服务 (linux) 环境变量问题

问题描述 投票:0回答:1

我有一个 ASP.NET Core 应用程序,其中包含以下设置文件:

appsettings.json

...

"AzureOpenAI": {
    "EndPoint": "https://PRODUCTION.openai.azure.com/",
    "ApiKey": "PRODUCTION-API-KEY"
},
"ServiceBus": {
    "ConnectionString": "PRODUCTION-CONNECTION-STRING",
    "QueueNames": {
      "Files": "files",
      "SessionCallBack": "sessionCallBack"
   }
}
...

appsettings.staging.json

...
"AzureOpenAI": {
    "EndPoint": "https://STAGING.openai.azure.com/",
    "ApiKey": "STAGING-API-KEY"
},
"ServiceBus": {
    "ConnectionString": "STAGING-CONNECTION-STRING"
}
...

这是我的

program
课程:

...
var env = builder.Environment.EnvironmentName;
var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true)
    .AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: true)
    .AddCommandLine(args)
    .Build();

Console.WriteLine($"Environment: {env}"); // Staging

// This is working
var AzureOpenAIConfig = _config.GetRequiredSection("AzureOpenAI").Get<AzureOpenAIConfig>(); 

// Service Bus, not working!
var ServiceBusConfig = config.GetRequiredSection("ServiceBus").Get<ServiceBusConfig>()!;
Console.WriteLine($"ServiceBus:ConnectionString '{ServiceBusConfig.ConnectionString}'");
// Output: ServiceBus:ConnectionString 'STAGING-CONNECTION-STRING'
...

我的地形模块:

...
resource "azurerm_linux_web_app" "app" {
  name                = "app-${local.appName}"
  location            = var.location
  resource_group_name = module.rg.resourcegroup_name
  service_plan_id     = azurerm_service_plan.asp.id

  identity {
    type = "SystemAssigned"
  }

  site_config {
    always_on = true

    application_stack {
      dotnet_version = "8.0"
    }
  }

  app_settings = {
    "ASPNETCORE_ENVIRONMENT"         = var.env == "prod" ? "Production" : "Staging"
    "AzureOpenAI__EndPoint"          = azurerm_cognitive_account.open_ai.endpoint
    "AzureOpenAI__ApiKey"            = "@Microsoft.KeyVault(VaultName=${module.kv.name};SecretName=AzureOpenAI-ApiKey)"
    "ServiceBus__ConnectionString"     = "@Microsoft.KeyVault(VaultName=${module.kv.name};SecretName=ServiceBus-ConnectionString)"
    "AzureMonitor__ConnectionString" =
}
...

环境变量:

enter image description here

enter image description here

因此,部署后我可以在应用程序配置中看到

KV-Secrets
,并且它们的值在 kv 中也有效。
AzureOpenAI:EndPoint
AzureOpenAI:ApiKey
运行良好,但不适用于服务巴士,这真的很奇怪!

c# asp.net-core terraform azure-web-app-service appsettings
1个回答
0
投票

终于找到答案了!我应该在我的程序类中添加一行:

var env = builder.Environment.EnvironmentName;
var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true)
    .AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables() // this line was missing
    .AddCommandLine(args)
    .Build();
© www.soinside.com 2019 - 2024. All rights reserved.