c# - 如何在 ConfigureServices 方法中使用 ASP.NET Core 2.1

我目前正在启动一个 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# - Automapper:对所有其他成员使用默认映射

android-management-api - Google Pixel 设备在发出重启命令后重启

spring-boot - 将实体与 OneToMany 和 HATEOAS RessourceAs

python - TensorFlow 无法将字符串类型的 Tensor 复制到设备

c# - OmniSharp MSBuild ProjectManager 无法更新我的 .cspr

node.js - 将参数/通配符定义为 npm 脚本键/名称的一部分

asynchronous - 如何使 promise 因 clojure 错误而失败?

reactjs - `react-dom` 是库还是框架?

postgresql - 如何为 linux、Fedora 安装 psycopg2

reactjs - react native : Module RCTLog is not a re