Leer una clave de Web.Config usando ConfigurationManager
Estoy intentando leer las claves del Web.config
archivo 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
archivo Web.config
:
<configuration>
....
<appSettings>
<add key="PFUserName" value="myusername"/>
<add key="PFPassWord" value="mypassword"/>
</appSettings>
....
</configuration>
Cuando depuro el código username
y password
soy solo null
, no obtengo el valor de las claves.
¿Qué estoy haciendo mal al leer estos valores?
Intente utilizar la clase WebConfigurationManager del System.Web.Configuration
espacio de nombres. Por ejemplo:
string userName = WebConfigurationManager.AppSettings["PFUserName"]
var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
Si la persona que llama es otro proyecto, debe escribir la configuración en el proyecto de la persona que llama, no en el llamado.
Esta solución me pareció bastante útil . Utiliza C# 4.0 DynamicObject para empaquetar el ConfigurationManager. Entonces, en lugar de acceder a valores como este:
WebConfigurationManager.AppSettings["PFUserName"]
accedes a ellos como una propiedad:
dynamic appSettings = new AppSettingsWrapper();
Console.WriteLine(appSettings.PFUserName);
EDITAR : Agregar un 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;
}
}