【问题标题】:How to read Windows environment variables on dotnet core?如何在 dotnet core 上读取 Windows 环境变量?
【发布时间】:2020-04-24 04:42:05
【问题描述】:

我正在使用 dotnet core 3.1 构建一个 Web API,现在我需要在 Windows 环境变量中存储一种敏感信息,我已经这样做了。我们称它为 MY_WIN_VAL_X。

我尝试在 Startup.cs (link) 上的 ConfigureServices 方法上使用以下代码

public class Startup
{
    private IHostEnvironment Environment { get; set; }

    public Startup(IConfiguration configuration, IHostEnvironment environment)
    {
        Environment = environment;

        this.Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
       ...other code
       var myEnvValX = Environment.GetEnvironmentVariable("MY_WIN_VAL_X");
    }
}

但是,我收到了这个错误:

“IHostEnvironment”不包含定义 'GetEnvironmentVariable' 并且没有可访问的扩展方法 'GetEnvironmentVariable' 接受类型的第一个参数 可以找到“IHostEnvironment”(您是否缺少 using 指令 还是程序集参考?)[API]csharp(CS1061)

有谁知道如何实现它?如何获取自定义的 Windows 环境变量?

【问题讨论】:

    标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0 asp.net-core-webapi


    【解决方案1】:

    读取环境变量是通过Configuration mechanism 完成的,因此可以通过IConfiguration 对象而不是IHostEnvironment 对象访问。

    要将环境变量添加到您的配置中,您需要将其添加到您的 Program.cs 文件中:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.AddEnvironmentVariables(); // <-- this line
                    // optional: use a prefix
                    //config.AddEnvironmentVariables(prefix: "MYPREFIX_"); // <-- this line
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
    

    然后你可以像这样读取你的环境变量:

    public class Startup
    {
        private IConfiguration Configuration { get; set; }
        private IHostEnvironment Environment { get; set; }
    
        public Startup(IConfiguration configuration, IHostEnvironment environment)
        {
            Environment = environment;
    
            this.Configuration = configuration;
        }
    
        public void ConfigureServices(IServiceCollection services)
        {
           ...other code
           var myEnvValX = this.Configuration["MY_WIN_VAL_X"];
        }
    }
    

    请注意,您可以通过添加前缀来限制可用的环境变量。例如,如果您有MYPREFIX_MY_WIN_VAL_XMYPREFIX_MY_WIN_VAL_Y,则可以使用config.AddEnvironmentVariables(prefix: "MYPREFIX_") 限制环境变量,并且只会公开这两个变量(前缀将被删除)。

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 2019-01-21
      相关资源
      最近更新 更多