Leer una clave de Web.Config usando ConfigurationManager

Resuelto twal asked hace 13 años • 10 respuestas

Estoy intentando leer las claves del Web.configarchivo 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 appSettingsarchivo Web.config:

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

Cuando depuro el código usernamey passwordsoy solo null, no obtengo el valor de las claves.

¿Qué estoy haciendo mal al leer estos valores?

twal avatar Jan 04 '11 22:01 twal
Aceptado

Intente utilizar la clase WebConfigurationManager del System.Web.Configurationespacio de nombres. Por ejemplo:

string userName = WebConfigurationManager.AppSettings["PFUserName"]
Hector Correa avatar Jan 04 '2011 15:01 Hector Correa
  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
yogeswaran K avatar Jun 17 '2013 13:06 yogeswaran K

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.

Saber avatar Oct 22 '2014 11:10 Saber

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;
    }
}
mateuscb avatar Mar 05 '2014 18:03 mateuscb