使用ConfigurationManager从Web.Config读取密钥

我正在尝试从web层的Web.config文件中读取不同的层的键(相同的解决scheme)

这是我正在尝试的:

 string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"]; string password = System.Configuration.ConfigurationManager.AppSettings["PFPassWord"]; 

这里是我的appSettingsWeb.config文件中:

 <configuration> .... <appSettings> <add key="PFUserName" value="myusername"/> <add key="PFPassWord" value="mypassword"/> </appSettings> .... </configuration> 

当我debugging代码的usernamepassword只是null ,所以它没有得到的关键的价值。

我做错了什么读取这些值?

尝试使用WebConfigurationManager类。 例如:

 string userName = WebConfigurationManager.AppSettings["PFUserName"] 
  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"]; 

如果调用者是另一个项目,则应该在调用者项目中编写configuration,而不是调用者中的configuration。

我发现这个解决scheme是相当有帮助的 。 它使用C#4.0 DynamicObject来包装ConfigurationManager。 所以不是像这样访问值:

  WebConfigurationManager.AppSettings["PFUserName"] 

你访问他们作为财产:

 dynamic appSettings = new AppSettingsWrapper(); Console.WriteLine(appSettings.PFUserName); 

编辑 :添加代码片段的情况下链接变得陈旧:

 public class AppSettingsWrapper : DynamicObject { private NameValueCollection _items; public AppSettingsWrapper() { _items = ConfigurationManager.AppSettings; } public override bool TryGetMember(GetMemberBinder binder, out object result) { result = _items[binder.Name]; return result != null; } } 

如果此项目正在被另一个项目使用,则会发生此问题。 确保您将应用程序设置键复制到父项目的app.config或web.config。

你也可以尝试这一行从app.config文件获取string值。

 var strName= ConfigurationManager.AppSettings["stringName"]; 

对不起,我没有testing过,但我认为这是这样做的:

 var filemap = new System.Configuration.ExeConfigurationFileMap(); System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(filemap, System.Configuration.ConfigurationUserLevel.None); //usage: config.AppSettings["xxx"]