c# - 如何在 ConfigureServices 方法中使用 ASP.NET Core 2.1 读取用户环境变量?

标签 c# asp.net-core .net-core environment-variables asp.net-core-webapi

我目前正在启动一个 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/

相关文章:

c# - 与 C# 的蓝牙通信

c# - 当 Windows 从 sleep 模式唤醒时启动应用程序

sql-server - 使用 .net Core/EF Core 在 SQL Server 2016 中的 ASP MVC 应用程序中进行列加密

c# - ASP.NET CORE 3.1 读取 session 时未分配初始值时出现 NULL 异常错误

c# - 如何在 C# .net core/.net standard 中获取可用内存或使用内存

c# - 在 C# 中调整 JPEG 图像的大小会降低其分辨率

c# - 为我的文档展开环境变量

azure - 将 IdentityServer 4 部署到 Azure VM 时找不到证书

c# - 如何在docker中设置dotnet core的环境?

.net-core - ocelot 配置文件中的环境变量