在ASP.NET Core的静态main方法中访问IHostingEnvironment

6
我试图在我的升级后的Asp.Net Core RC2应用程序的静态void main中获取配置值。在Startup的构造函数中,我可以注入IHostingEnvironment,但无法在静态方法中执行此操作。 我正在遵循https://github.com/aspnet/KestrelHttpServer/blob/dev/samples/SampleApp/Startup.cs,但希望将我的pfx密码放在appsettings中(是的,它应该在用户机密中,并最终到达那里)。
public Startup(IHostingEnvironment env){}

public static void Main(string[] args)
{
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddJsonFile("hosting.json");
        builder.AddEnvironmentVariables();
        var configuration = builder.Build();
       ...
       var host = new WebHostBuilder()
            .UseKestrel(options =>
            {
                // options.ThreadCount = 4;
                options.NoDelay = true;
                options.UseHttps(testCertPath, configuration["pfxPassword"]);
                options.UseConnectionLogging();
            })
}
2个回答

22

在2016年5月26日的aspnetcore.slack.com的#general频道上经过一些讨论后,David Fowler说:“你可以新建一个webhostbuilder并调用getsetting(“environment”)”,并且“hosting config!= app config”。

var h = new WebHostBuilder();
var environment = h.GetSetting("environment");
var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{environment}.json", optional: true)
        .AddEnvironmentVariables();
var configuration = builder.Build();

看起来在 .Net Core 2.0 中 GetSetting 不再是 WebHostBuilder 的一部分了。 - Alan
@Alan 我仍然在使用它在 asp.net core 2.1 中。 - Mawardy

3

如果您想最终将Https证书的密码存储在用户机密中,请在Program.cs的Main函数的适当部分添加以下代码:

var config = new ConfigurationBuilder()
    .AddUserSecrets("your-user-secrets-id") //usually in project.json

var host = new WebHostBuilder()
    .UseConfiguration(config)
            .UseKestrel(options=> {
                options.UseHttps("certificate.pfx", config["your-user-secrets-id"]);
            })

用户密码必须直接传递,因为此阶段尚无法访问“userSecretsId”的project.json配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接