c# - 有没有办法将 appsettings 转换为 env. ASP.NET Core 应用程序中的变量?

标签 c# azure asp.net-core asp.net-web-api

我创建了一个新的 asp.net core API 并将以下设置添加到 appsettings.Development.json 中:

{
  "AZURE_TENANT_ID": "<tenant-id>",
  "AZURE_CLIENT_ID" : "<client-id>",
  "AZURE_CLIENT_SECRET": "<client-secret>"
}

注意:除了添加这些设置和尝试获取其中之一的“单行”之外,我没有做任何其他事情:

var x = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");

但不知何故,这些设置没有添加为环境变量。例如,如果我创建一个新的 Azure 函数,请将相同的设置添加到 local.settings.json 文件中,并尝试通过 Environment.Get.... 获取其中之一> 就像上面一样 - 一切都按预期进行。

我认为(至少感觉上)我已经搜索了 Microsoft 的所有现有文档才能解决这个问题。我相信这里有一些我不理解并且显然找不到的基本原理。

有人可以帮助我理解其中的区别以及为什么我将这些设置作为 Azure Function 中的环境变量而不是 asp.net core 应用程序中的环境变量吗?

更新:
为了澄清这一点,我在本地运行它,而不是尝试在任何生产环境中获取变量。

目标
该应用程序正在调用 Azure 中的另一个需要 JWT token 的服务。这里的目标是使用 DefaultAzureCredential以及用于获取 token 的凭据类型 EnvironmentCredential,无论应用是在本地运行还是在 Azure 中运行。当应用程序在 Azure 中运行时,它使用用户分配的托管标识,该标识将通过 AZURE_CLIENT_ID 分配,我们不需要任何其他设置。但是,当应用在本地运行时,我们无法引用任何托管身份,因此我们还需要指定 AZURE_CLIENT_SECRETAZURE_TENANT_ID

最佳答案

local.settings.json 的文档中它说:

The function app settings values can also be read in your code as environment variables.

同样的情况不适用于 appsettings.json 文件。它们不应该用于定义环境变量。

对于开发,您可以在 launchsettings.json 中定义环境变量:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:59481",
      "sslPort": 44308
    }
  },
  "profiles": {
    "EnvironmentsSample": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7152;http://localhost:5105",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_TENANT_ID": "<tenant-id>",
        "AZURE_CLIENT_ID" : "<client-id>",
        "AZURE_CLIENT_SECRET": "<client-secret>"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_TENANT_ID": "<tenant-id>",
        "AZURE_CLIENT_ID" : "<client-id>",
        "AZURE_CLIENT_SECRET": "<client-secret>"
      }
    }
  }
}

关于c# - 有没有办法将 appsettings 转换为 env. ASP.NET Core 应用程序中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74221216/

相关文章:

c# - 在 Windows 应用程序中导入 Excel 工作表后,DataGridView 显示额外的数字

c# - 从 C++ native 插件更新 Vector3 数组

ssl - 这些证书是什么以及它们来自哪里?

xml - 通过 JWT token 在 Azure API 管理中进行授权

c# - ASP.NET Core Angular 7 Http Post-需要复杂对象吗?

ASP.NET 5 HTML5 历史

c# - LINQ 为简单订单生成子查询

c# - 带有可选 canExecute 的异步 ICommand 实现

没有负载均衡器的 Azure vmss

c# asp.net core Bearer错误="invalid_token"