ASP.NET Core 在构建过程中设置托管环境

我有一个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 restore

dotnet build --environment "Development"

dotnet publish -o ..\Artifacts

我将发布相关文件和相关代码以获取更多信息...


程序.cs


public 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}() 检查在这里不起作用?


catspeake
浏览 523回答 1
1回答

交互式爱情

环境名称是运行时概念,而不是编译(或构建)时概念。这意味着在构建(或发布)应用程序时,环境尚不可知,并且设置无效。发布应用程序时,您的代码未运行。您可以在运行应用程序时控制环境名称,例如通过以下参数dotnet run:dotnet&nbsp;run&nbsp;--environment=Production或者使用已知的环境变量ASPNETCORE_ENVIRONMENT。例如,通过在命令行执行此操作:set&nbsp;ASPNETCORE_ENVIRONMENT=ProductionlaunchSettings.json出于调试目的,也可以使用该文件设置此变量。此文件是在使用 Visual Studio 或dotnet new.应用程序的默认环境是生产环境。有关此主题的更多信息,请参阅文档。
打开App,查看更多内容
随时随地看视频慕课网APP