如何将 AppSettings 获取为常量值?

How do I get AppSettings as a constant value?

接受下面的代码

Web.config:

<configuration>
  <appSettings>
    <add key="accesstoken:case1" value="00b8d5e4-a318-4f2d-bd5b-e7832861dbb6" />
  </appSettings>
</configuration>

Controller.cs:

public JsonResult GetSomething(string token = "")
{
    switch (token)
    {
        case System.Configuration.ConfigurationManager.AppSettings["accesstoken:case1"]:
           ...
        case ...:
    }
}

所以这里我收到 case1 的错误消息,指出需要一个常量值。我的印象是 AppSettings 是不变的。但是因为它的访问方式是我认为常数是不可能的。

但我真的很喜欢switch/cases而不是一堆if/elses,所以是否可以访问AppSettings以获得一个常量值?

文件中的常量并不意味着它也是代码中的常量。代码中的常量总是有一个关键字const。它不一样。可以修改文件设置中配置的值在您的应用程序执行期间。执行期间无法修改常量字段。

无需一堆 if-elseswitch-case 即可实现所需操作的解决方案是在您的应用程序启动时加载包含所有键的字典(例如,以 accesstoken:*)

public static Lazy<IDictionary<string, string>> AppSettingsAccessTokens = new Lazy<IDictionary<string, string>>(() =>
{
    return ConfigurationManager.AppSettings.AllKeys.Where(p => p.StartsWith("accesstoken:")).ToDictionary(p => p, p => ConfigurationManager.AppSettings[p]);
});

最后,在您的 GetSomething 方法中,您喜欢:

public JsonResult GetSomething(string token = "")
{
    var accessTokenSettingKey = AppSettingsAccessTokens.Value.Values.FirstOrDefault(p => p == token)?.Key;

    // ....
}