我有一個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 關注
- 583 瀏覽
添加回答
舉報
0/150
提交
取消