我目前正在启动一个 ASP.NET Core Web API(2.1 版)并尝试读取我从本地计算机设置的自定义环境变量。我设置的环境变量用于 AWS 客户端 ID、 secret 等。我试图在 Startup.cs 类的 ConfigureServices 方法中访问这些环境变量的值。但是,无论我尝试什么,下面的命令都会返回“null”。
var result = Environment.GetEnvironmentVariable("<ENV_VARIABLE>");
为了提供更多背景知识,我需要读取一些客户端 ID 和 secret 并将它们传递给相关类的构造函数。现在,为了遵循最佳实践,我没有将这些 ID 和 secret 包含在 appsettings.json 文件中。相反,我在我的 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 上执行此操作。我不确定这是否会改变检索环境变量的方法,但我只想在这里提一下,以防万一!
最佳答案
好的,所以在阅读了 Kahbazi 发送的链接之后,我发现了以下关于环境变量和 .net 核心的信息:
“在基于 Unix 的系统上运行的 NET Core 不支持每台机器或每用户环境变量。”
从本质上讲,这似乎表明我无法访问 ~/.bash_profile 文件中的环境变量,因为 .NET Core 不支持它。我可以解决这个问题的方法是使用 dotnet run 命令启动应用程序或通过 docker 传递环境变量。
谢谢大家的帮助!
关于c# - 如何在 ConfigureServices 方法中使用 ASP.NET Core 2.1 读取用户环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045851/