ASP.NET Core中Program.Main中的访问环境名称


77

使用ASP.NET Mvc Core,我需要将开发环境设置为使用https,因此我Main在Program.cs中的方法中添加了以下内容:

var host = new WebHostBuilder()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseKestrel(cfg => cfg.UseHttps("ssl-dev.pfx", "Password"))
                .UseUrls("https://localhost:5000")
                .UseApplicationInsights()
                .Build();
                host.Run();

如何在此处访问托管环境,以便可以有条件地设置协议/端口号/证书?

理想情况下,我将只使用CLI来像这样操纵主机环境:

dotnet run --server.urls https://localhost:5000 --cert ssl-dev.pfx password

但是似乎没有从命令行使用证书的方法。

Answers:


149

我认为最简单的解决方案是从ASPNETCORE_ENVIRONMENT环境变量中读取值并将其与Environments.Development

var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var isDevelopment = environment == Environments.Development;

2
我忘记了System.Environment。谢谢!
Mike Lunn

16
请注意,在.NET Core 3.0+中,EnvironmentName该类被标记为已过时(docs.microsoft.com/en-us/dotnet/api/…),建议您切换到Environments该类(docs.microsoft.com/en-我们/ dotnet / api /…)。
布莱尔·艾伦

3
这仅在环境由环境变量设置时有效。也可以从命令行进行设置--environment "Development",例如
tjmoore

20

这是我的解决方案(为ASP.NET Core 2.1编写):

public static void Main(string[] args)
{
    var host = CreateWebHostBuilder(args).Build();

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        var hostingEnvironment = services.GetService<IHostingEnvironment>();

        if (!hostingEnvironment.IsProduction())
           SeedData.Initialize();
    }

    host.Run();
}

10
问题在于它创建了应用程序的整个实例,并再次破坏了它,只是为了获得环境名称。非常沉重的手。
骏马

2
@steed认为这是一种获取IHostingEnvironment的干净方法,并且只能在Run()之前执行一次,如果它有点“笨拙”,可以说它可以忽略不计。
B12Toaster

1
在生成Web Host Builder Build之前需要访问它
-jjxtra

2
@Steed util就像CreateHostBuilder(args).Build()。Run()一样,没有调用Run,您实际上并没有创建应用程序的整个实例,只是创建了主机,并请求了IHostingEnvironment的实例
jlchavez

2

在.NET Core 3.0中

using System;
using Microsoft.Extensions.Hosting;

然后

var isDevelopment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == Environments.Development;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.