C# .NET核心Web API未正确读取环境
我有一个.NET Core 2.0 Web API无法读取特定于环境的app.settings文件。据我所知,我已经遵循了所有相关步骤 这是我的C# .NET核心Web API未正确读取环境,c#,.net,asp.net-core,asp.net-core-webapi,C#,.net,Asp.net Core,Asp.net Core Webapi,我有一个.NET Core 2.0 Web API无法读取特定于环境的app.settings文件。据我所知,我已经遵循了所有相关步骤 这是我的Startup.cs构造函数: public Startup(IHostingEnvironment env) { var config = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.
Startup.cs
构造函数:
public Startup(IHostingEnvironment env)
{
var config = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
}
然后我有一个appsettings.json
文件结构:
appsettings.json
-appsettings.debug.json
-appsettings.release.json
-appsettings.production.json
在部署API的服务器上,我有一个系统环境变量key/value对
Variable=ASPNETCORE\u环境值=Release
但是,当我调用API时,会使用appsettings.production.json
值,这是在未找到ASPNETCORE\u environment
环境变量时的默认值
关于我的安装程序可能缺少什么导致此默认行为的想法?您尚未指定,但我假设您在IIS中运行。如果是这种情况,您需要编辑应用程序池的高级属性,并将“加载用户设置”选项设置为true。否则,它实际上不会读取您的环境变量。可能是与案例相关的问题?类似于
stringsetingsfilepath=$“appsettings.{env.EnvironmentName.ToLower()}.json”代码>@ChristopherJ。文档说它不区分大小写,我的测试也显示了同样的情况。@bcwiniger检查文件名时,AddJsonFile
方法肯定区分大小写,所以请将文件重命名为appsettings.Release.json
或使用.ToLower()
approach@Set根据上下文,它不区分大小写。“在Windows和macOS上,指定的环境名称不区分大小写。无论您将变量设置为Development或Development或Development,结果都是相同的。”。我已尝试更改env变量以匹配appsettings文件名,并尝试了.ToLower()
方法。我正在打印存储在IHostingEnvironment
中的环境名称,它将返回Production
。AddJsonFile只使用作为第一个字符串参数提供的文件名。您可以使用env.EnvironmentName构造此字符串-所以此字符串值取决于您的env名称的大小写。2事实上,IHostingEnvironment.EnvironmentName中始终只有“Production”作为值,这意味着您没有正确定义环境名称“Load User Profile”,但这救了我一命。谢谢