我创建了一个新的 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_SECRET
和 AZURE_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/