如何从 ASP.NET Core 的 Main() 中获取环境变量?
Posted
技术标签:
【中文标题】如何从 ASP.NET Core 的 Main() 中获取环境变量?【英文标题】:How to get environment variables from inside Main() in ASP.NET Core? 【发布时间】:2020-06-26 18:56:18 【问题描述】:我想知道代码是否是 Dev/Stage,所以我需要得到它。我尝试了下面的代码,但它似乎跳过了运行 Startup.cs 的 Configure()。帮忙?
public static void Main(string[] args)
IHost host = CreateHostBuilder(args).Build();
SeedDatabase(host);
host.Run();
public static IHostBuilder CreateHostBuilder(string[] args)
//return Host.CreateDefaultBuilder(args)
// .ConfigureWebHostDefaults(webBuilder =>
//
// webBuilder.UseStartup<Startup>();
// );
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureServices(services => )
.Configure(app =>
Env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
);
);
【问题讨论】:
***.com/questions/32548948/… toralux 的回答在 main() 中获取环境 【参考方案1】:您还没有完全解释您要获取的内容(环境变量或环境对象)。但根据问题中的一些代码,您似乎想访问IWebHostEnvironment
。
这很容易。 IHost
有一个 Services
属性。您只需要请求相应的服务即可。
IHost host = CreateHostBuilder(args).Build();
IWebHostEnvironment env = host.Services.GetRequiredService<IWebHostEnvironment>();
// now do something with env
SeedDatabase(host);
host.Run();
现在,如果您首先需要环境,您还可以从different overload 的ConfigureServices
内部的WebHostBuilderContext
访问环境:
webBuilder.ConfigureServices((ctx, services) =>
IWebHostEnvironment env = ctx.HostingEnvironment;
// Do something with env
);
同样,IHostBuilder
(通用主机)上的ConfigureAppConfiguration
、ConfigureHostConfiguration
和 ConfigureServices
也提供对IHostEnvironment
的访问(注意缺少“Web”):
return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, config) =>
IHostEnvironment env = ctx.HostingEnvironment;
)
.ConfigureServices((ctx, services) =>
IHostEnvironment env = ctx.HostingEnvironment;
)
.ConfigureWebHostDefaults(/* etc */ );
通用主机和网络主机使用相同的服务集合、环境等(除了添加的IWebHostEnvironment
)
旁注:通常在第一次调用您的应用程序之前不会调用 Startup.cs。这可能就是它似乎没有运行的原因。
【讨论】:
【参考方案2】:尝试从您的 main 方法中获取它,如下所示:
static void Main(string[] args)
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
【讨论】:
以上是关于如何从 ASP.NET Core 的 Main() 中获取环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?
如何从 ASP.NET Core WebAPI 获取 int 值?