使用下面的代码
的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是不变的。但是因为它是按照它的方式被访问的,所以我认为常数是不可能的。
但我真的很喜欢切换/案例,而不是拥有一堆if / elses,那么是否可以访问AppSettings来获得一个常量值?
答案 0 :(得分:2)
文件中的常量并不意味着它也是代码中的常量。代码中的常量总是有一个关键字const
。它不一样。文件设置中配置的值可以在执行期间修改在执行期间无法修改常量字段。
在没有一堆if-else
或switch-case
的情况下实现您需要做的事情的解决方案是在应用程序启动时加载将包含所有键的字典(例如从{{1}开始})
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