ASP.NET Core 的配置键是否应该是不区分大小写的?

8
我为我的ASP.NET Web应用程序制作了自定义配置提供程序,继承自Microsoft.Extensions.Configuration.ConfigurationProvider,并重写Load()方法,并使用新的Dictionary<string, string>()初始化属性IDictionary<string, string> Data
因此,我有一个包含配置信息的appsettings.json配置文件。
{
    "Token" : "Token 1"
}

在我的自定义提供程序中,我用"Token 2"覆盖了Token。

我的代码出了一个错误, 当我调用configuration["token"](小写字母), 我发现从appsettings加载的值是正确的,但从我的自定义提供程序没有加载。

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

1个回答

13

微软从NuGet提供的.NET本身的提供程序默认使用大小写不敏感的键(code)。

无论您的自定义提供程序是否区分大小写,都由您决定,但我建议您采用相同的方法,并使用不区分大小写的键值查找作为源。

如果您正在使用Dictionary<K, V>,那么只需使用带有比较器的相同构造函数,并使用StringComparer.OrdinalIgnoreCase即可。


4
在.NET中实现自定义配置提供程序的文档中提到:由于配置键不区分大小写,因此用于初始化数据库的字典是使用不区分大小写的比较器(StringComparer.OrdinalIgnoreCase)创建的。这是我在文档中找到的唯一提到不区分大小写的地方。我不想实现一个带有区分大小写键的自定义提供程序,因为这与预期相反(内置提供程序都是不区分大小写的)。 - 0xced
6
我发现另一个记录大小写不敏感的地方:ASP.NET Core配置明确说明“配置键是大小写不敏感的。例如,ConnectionStringconnectionstring被视为等效的键。” - 0xced

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接