asp.net core 中的配置键是否应该不区分大小写?

gla*_*asa 8 c# configuration asp.net-core

我为我的 ASP.NET Web 应用程序创建了一个自定义配置提供程序,我从其中继承Microsoft.Extensions.Configuration.ConfigurationProvider,并Load()覆盖该方法并IDictionary<string, string> Data使用新的Dictionary<string, string>().

所以我有一个 appsettings.json 配置文件,包含

{
    "Token" : "Token 1"
}
Run Code Online (Sandbox Code Playgroud)

在我的自定义提供程序中,我用“Token 2”覆盖 Token

我的代码中有一个错误,我在其中调用了configuration["token"](小写),并且我注意到应用程序设置中的值已加载,但不是我的自定义提供程序中的值。

因此,appsettings 配置似乎不区分大小写,但我的自定义提供程序则不然。
那么应该是这样吗?我刚刚创建了一个新字典,我不确定是否可以在不编写更多代码的情况下使其不区分大小写。

Mar*_*llo 15

Microsoft 从 NuGet 作为 .NET 本身的一部分提供的提供程序默认使用不区分大小写的键 ( code )。

您的自定义提供程序是否区分大小写取决于您,但我建议您也这样做并使用不区分大小写的键值查找来支持源。

如果您使用的是Dictionary<K, V>,那么就像使用带有比较器和使用 的相同构造函数一样简单StringComparer.OrdinalIgnoreCase

  • 哦,我发现另一个记录不区分大小写的地方:[ASP.NET Core 中的配置](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/#configuration-keys-and -values) 明确指出 _Configuration 键不区分大小写。例如,“ConnectionString”和“connectionstring”被视为等效键。_ (6认同)
  • [在 .NET 中实现自定义配置提供程序](https://learn.microsoft.com/en-us/dotnet/core/extensions/custom-configuration-provider) 的文档说:_由于配置键不区分大小写,用于初始化数据库的字典是使用不区分大小写的比较器 (StringComparer.OrdinalIgnoreCase) 创建的。_ 这是我在文档中找到的唯一提到不区分大小写的地方。我宁愿不实现具有区分大小写键的自定义提供程序,因为它违反了预期(内置提供程序都是不区分大小写的)。 (4认同)