Как вы читаете переменные среды пользователя с ASP.NET Core 2.1 в методе ConfigureServices? - PullRequest
1 голос
/ 22 сентября 2019

В настоящее время я запускаю ASP.NET Core Web API (версия 2.1) и пытаюсь прочитать пользовательские переменные среды, которые я установил на своем локальном компьютере.Переменные среды, которые я установил, предназначены для идентификаторов клиента AWS, секретов и т. Д. Я пытаюсь получить доступ к значениям этих переменных среды в методе ConfigureServices внутри класса Startup.cs.Тем не менее, следующее возвращает 'null', независимо от того, что я пытаюсь.

var result = Environment.GetEnvironmentVariable("<ENV_VARIABLE>");

Чтобы предоставить больше возможностей, мне нужно прочитать некоторые клиентские идентификаторы и секреты и передать их конструктору соответствующего класса.Теперь, чтобы следовать рекомендациям, я не включаю эти идентификаторы и секреты в файл appsettings.json.Вместо этого я изменил файл ~. / Bash_profile на своем Mac и написал следующее:

# 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

Затем я сделалметод ConfigureServices внутри класса Startup.cs выглядит следующим образом:

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.Я не уверен, что это изменит подход к извлечению переменной среды, но я просто хочу упомянуть это здесь, если это так!

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Хорошо, поэтому после прочтения ссылки, отправленной Kahbazi, я обнаружил следующее относительно переменных среды и ядра .net:

". NET Core, работающий в системах на основе Unix, не поддерживает отдельные машины или-пользовательские переменные среды. "

По сути, это указывает на то, что я не могу получить доступ к переменным среды в моем файле ~ / .bash_profile, потому что .NET Core не поддерживает это.Я могу обойти это, запустив приложение с помощью команды запуска dotnet или передав переменные окружения через docker.

Спасибо всем за помощь!

0 голосов
/ 22 сентября 2019

Измените файл startup.cs.Метод AddEnvironmentVariables () следует добавить в конфигурацию.

using Microsoft.Extensions.Configuration;

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .ConfigureAppConfiguration((hostingContext, config) =>
                    {
                        config.AddEnvironmentVariables();
                    })
                    .UseStartup<Startup>();

Теперь вы можете использовать

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");

из файла configure.cs.

для получения дополнительной информации вы можетеиспользуйте следующие ссылки:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1 http://michaco.net/blog/EnvironmentVariablesAndConfigurationInASPNETCoreApps

Спасибо

...