自定义app.config节无法强制转换为NameValueCollection

本文关键字:转换 NameValueCollection app config 自定义 | 更新日期: 2023-09-27 18:30:12

本教程让我尝试做的事情看起来非常简单。我只想从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>

在即时窗口中,我可以执行:

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

返回字符串

["Authentication.PrincipalType"]: "ClientCertificate"

然而,当我尝试转换它(使用as NameValueCollection)时,正如本教程所说的那样,我会返回null,并且我的代码会爆炸。必须有一种比手动解析字符串结果更干净的方法来获取值"ClientCertificate"。

如何从app.config读取"ClientCertificate"

自定义app.config节无法强制转换为NameValueCollection

为什么不能像一样使用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");