我有一个ASP.NET Core Api使用 appsettings.{environmentname}.json 配置文件的地方。然后我还拥有具有不同环境选项的相应 launchSettings.json 文件,以便我可以使用任何特定的环境设置文件运行。在 Startup.cs 中,我们有一个条件设置,如果我们处于非生产环境中,那么我们使用一组特定的Jwt authentication(只是关闭了一些验证检查),然后在生产中,我们加载了一个不同的版本要打开的所有检查。在我的本地主机上,这在 environment.IsDevelopment() 返回 true 而 environment.IsProduction() 返回 false 的情况下效果很好。伟大的!但是,当我通过我们的构建过程运行它并部署到我们的测试环境时,environment.IsDevelopment() 现在返回 false。我在 Program.cs 文件中添加了添加 ConfigurationBuilder 的选项,以便我可以将变量传递给我的构建过程,如下所示:dotnet restoredotnet build --environment "Development"dotnet publish -o ..\Artifacts我将发布相关文件和相关代码以获取更多信息...程序.cspublic static IWebHost BuildWebHost(string[] args){ var config = new ConfigurationBuilder() .AddCommandLine(args) .Build(); return WebHost.CreateDefaultBuilder(args) .UseConfiguration(config) .UseStartup<Startup>() .UseNLog() .Build();}Startup.cs(ConfigureServices 方法)services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>{ // removed code not relevant... // options.TokenValidationParameters = Environment.IsProduction() // options.TokenValidationParameters = Environment.IsEnvironment("Prod") options.TokenValidationParameters = Environment.IsDevelopment() ? devTokenValidationParameters : prodTokenValidationParameters; // options.TokenValidationParameters = devTokenValidationParameters;});为什么 helper environment.Is{EnvironmentName}() 检查在这里不起作用?
1 回答
交互式爱情
TA贡献1712条经验 获得超3个赞
环境名称是运行时概念,而不是编译(或构建)时概念。这意味着在构建(或发布)应用程序时,环境尚不可知,并且设置无效。发布应用程序时,您的代码未运行。
您可以在运行应用程序时控制环境名称,例如通过以下参数dotnet run
:
dotnet run --environment=Production
或者使用已知的环境变量ASPNETCORE_ENVIRONMENT
。例如,通过在命令行执行此操作:
set ASPNETCORE_ENVIRONMENT=Production
launchSettings.json
出于调试目的,也可以使用该文件设置此变量。此文件是在使用 Visual Studio 或dotnet new
.
应用程序的默认环境是生产环境。有关此主题的更多信息,请参阅文档。
- 1 回答
- 0 关注
- 522 浏览
添加回答
举报
0/150
提交
取消