【发布时间】:2020-01-22 13:04:08
【问题描述】:
我目前正在启动一个 ASP.NET Core Web API(2.1 版)并尝试读取我从本地计算机设置的自定义环境变量。我设置的环境变量用于 AWS 客户端 ID、机密等。我试图在 Startup.cs 类的 ConfigureServices 方法中访问这些环境变量的值。但是,无论我尝试什么,以下内容都会返回“null”。
var result = Environment.GetEnvironmentVariable("<ENV_VARIABLE>");
为了提供更多的背景信息,我需要读取一些客户端 ID 和秘密并将它们传递给相关类的构造函数。现在,为了遵循最佳实践,我没有在 appsettings.json 文件中包含这些 ID 和机密。相反,我修改了 Mac 上的 ~./bash_profile 文件并编写了以下内容:
# Set the General AWS Variables
export AWS_ACCESS_KEY_ID=<>
export AWS_SECRET_ACCESS_KEY=<>
export AWS_DEFAULT_REGION=<>
# Set the AWS Cognito Variables
export COGNITO_USER_POOL_ID=<>
export COGNITO_USER_POOL_CLIENT_ID=<>
export COGNITO_USER_POOL_CLIENT_SECRET=<>
我还通过运行验证了这些环境变量持久化
printenv
然后,我使 Startup.cs 类中的 ConfigureServices 方法如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// The following 3 variables are null
var userPoolId = Environment.GetEnvironmentVariable("COGNITO_USER_POOL_ID");
var userPoolClientId = Environment.GetEnvironmentVariable("COGNITO_USER_POOL_CLIENT_ID");
var userPoolClientSecret = Environment.GetEnvironmentVariable("COGNITO_USER_POOL_CLIENT_SECRET");
var amazonCognitoIdentityProvider = new AmazonCognitoIdentityProviderClient(RegionEndpoint.USEast1);
var cognitoUserPool = new CognitoUserPool(userPoolId, userPoolClientId, amazonCognitoIdentityProvider, userPoolClientSecret);
services.AddSingleton<IAmazonCognitoIdentityProvider>(x => amazonCognitoIdentityProvider);
services.AddSingleton<CognitoUserPool>(x => cognitoUserPool);
services.AddCognitoIdentity();
}
但是,“Environment.GetEnvironmentVariable(...)”的返回值每次都是“null”。我不确定我做错了什么。我假设我对环境变量和/或 ASP.NET Core 如何检索它们有误解,但我非常感谢一些关于为什么我当前的代码不读取环境变量的帮助。
提前谢谢你!
编辑:
我还应该提到我正在尝试在 Mac 上执行此操作。我不确定这是否会改变检索环境变量的方法,但我只想在这里提一下,以防万一!
【问题讨论】:
-
你在哪个用户下运行asp核心进程?
-
我的意思是 EnvironmentVariableTarget 作为第二个参数
-
@Oleg 我希望使用正确的 EnvironmentVariableTarget 可以解决问题;然而,不幸的是它没有。我更改了代码以尝试所有三个选项(EnvironmentVariableTarget.Machine、EnvironmentVariableTarget.Process 和 EnvironmentVariableTarget.User),但每个选项仍然返回 null。
-
你有没有检查docs.microsoft.com/en-us/dotnet/api/…上的
On macOS and Linux systems部分
标签: c# asp.net-core .net-core environment-variables asp.net-core-webapi