.NET Core Web API 无法正确读取环境

Posted

技术标签:

【中文标题】.NET Core Web API 无法正确读取环境【英文标题】:.NET Core Web API not reading environment correctly 【发布时间】:2018-05-10 21:07:46 【问题描述】:

我有一个 .NET Core 2.0 Web API 无法读取特定于环境的 app.settings 文件。据我所知,我已遵循所有相关步骤。

这是我的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 部署到的服务器上,我有一个系统环境变量键/值对

Variable = ASPNETCORE_ENVIRONMENT Value = Release

但是,当我调用 API 时,会使用 appsettings.production.json 值,这(据我了解)是未找到环境变量 ASPNETCORE_ENVIRONMENT 时的默认值。

考虑一下我的设置可能会导致这种默认行为吗?

【问题讨论】:

可能是案件相关问题?类似string settingsFilePath = $"appsettings.env.EnvironmentName.ToLower().json"; @ChristopherJ。文档说它不区分大小写,我的测试也显示了相同的结果。 @bcwiniger AddJsonFile 方法在检查文件名时肯定区分大小写,因此将文件重命名为appsettings.Release.json 或使用.ToLower() 方法 @根据docs设置不区分大小写。 “在 Windows 和 macOS 上,指定的环境名称不区分大小写。无论您将变量设置为 Development 还是 development 或 DEVELOPMENT,结果都是一样的”。我尝试更改 env 变量以匹配 appsettings 文件名,并尝试了 .ToLower() 方法以及没有运气。我正在打印存储在IHostingEnvironment 中的环境名称,它又回来了Production AddJsonFile 仅适用于文件名,作为第一个字符串参数提供。您使用 env.EnvironmentName 构造此字符串 - 因此此字符串值取决于您的 env 名称的大小写。 2 事实上,您始终只有“生产”作为 IHostingEnvironment.EnvironmentName 的值,这意味着您没有正确定义环境名称。 【参考方案1】:

您尚未指定,但我假设您在 IIS 中运行。如果是这种情况,您需要编辑应用程序池的高级属性并将“加载用户配置文件”选项设置为 true。否则,它实际上不会从您的环境变量中读取。

【讨论】:

'加载用户配置文件',但这救了我。谢谢。

以上是关于.NET Core Web API 无法正确读取环境的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core 5 Web Api - Xunit 没有读取我的 appsettings.Development

使用 Azure Ad Auth 从 .NET Core Web API 读取/写入 Azure Blob

一文了解.Net Core 3.1 Web API基础知识

如何在 ASP Net Core Web API 上正确地将列表转换为 IQueryable

ASP.NET Core Web API InvalidOperationException:无法解析服务 [重复]

我的 ASP.NET Core 应用程序说它无法读取 web.config