Lectura de una clave de Web.Config usando ConfigurationManager

Intento leer las claves del archivo Web.config en una capa diferente a la capa web (Misma solución)

Esto es lo que estoy intentando:

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

Y aquí está mi appSettings en el archivo Web.config :

  ....     ....  

Cuando depuro el código, el username y la password son simplemente null , por lo que no obtiene el valor de las claves.

¿Qué estoy haciendo mal al leer estos valores?

Intente utilizar la clase WebConfigurationManager en su lugar. Por ejemplo:

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

Encontré esta solución bastante útil . Utiliza C # 4.0 DynamicObject para envolver el ConfigurationManager. Entonces, en lugar de acceder a valores como este:

  WebConfigurationManager.AppSettings["PFUserName"] 

usted accede a ellos como una propiedad:

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

EDITAR : Agregar fragmento de código en caso de que el enlace se vuelva obsoleto:

 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; } } 

Si la persona que llama es otro proyecto, debe escribir la configuración en el proyecto de llamante, no en el llamado.

Este problema ocurre si este proyecto está siendo utilizado por otro proyecto. Asegúrese de copiar las claves de configuración de la aplicación en app.config o web.config del proyecto principal.

También puede probar esta línea para obtener el valor de cadena del archivo app.config .

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

La ruta completa es

 System.Configuration.ConfigurationManager.AppSettings["KeyName"] 

Lamento no haber probado esto, pero creo que se hizo así:

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