自定义 app.config 部分无法转换为 NameValueCollection

Custom app.config section fails to cast to NameValueCollection

This tutorial 让我想做的事情看起来非常简单。我只想从 web.config 中读取一个自定义属性。这是相关部分:

<configSections>
    <section name="Authentication.WSFedShell" type="System.Configuration.DictionarySectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

<Authentication.WSFedShell>
    <add key="Authentication.PrincipalType" value="ClientCertificate" />
</Authentication.WSFedShell>

立即window我可以执行:

System.Configuration.ConfigurationManager.GetSection("Authentication.WSFedShell")

哪个returns字符串

["Authentication.PrincipalType"]: "ClientCertificate"

然而,当我尝试转换它(使用 as NameValueCollection)时,正如 this tutorial 所说的那样,我得到 null 返回并且我的代码崩溃了。必须有一种比手动解析字符串结果更简洁的方法来获取值 "ClientCertificate"。

如何从 app.config 读取 "ClientCertificate"?

为什么你不能像

一样使用AppSetting
<configuration>
  <appSettings>
    <add key="Authentication.PrincipalType" value="ClientCertificate"/>
  </appSettings>
</configuration>

   System.Configuration.ConfigurationManager.AppSettings["Authentication.PrincipalType"]

您的部分的问题很可能是 Type 属性。但是无论如何,您需要将 GetSection() 的结果转换为为

等部分定义的类型
System.Configuration.DictionarySectionHandler config = (System.Configuration.DictionarySectionHandler)System.Configuration.ConfigurationManager.GetSection("Authentication.WSFedShell");