Lecture d'une clé sur le Web.Config en utilisant ConfigurationManager

J'essaie de lire les clés du fichier Web.config dans une couche différente de la couche web (même solution)

Voici ce que j'essaie:

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

Et voici mon appSettings dans le Web.config fichier:

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

Quand je débogue le code username et password sont juste null, donc il n'obtient pas la valeur des clés.

Qu'est-ce que je fais de mal à lire ces valeurs?

245
demandé sur Max 2011-01-04 18:27:45

9 réponses

Essayez d'utiliser la classe WebConfigurationManager à la place. Par exemple:

string userName = WebConfigurationManager.AppSettings["PFUserName"]
396
répondu Hector Correa 2014-07-11 16:55:54
  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
26
répondu yogee 2016-09-09 10:17:11

J'ai trouvé cette solution très utile . Il utilise C # 4.0 DynamicObject pour envelopper le ConfigurationManager. Donc, au lieu d'accéder à des valeurs comme celle-ci:

 WebConfigurationManager.AppSettings["PFUserName"]

Vous y accédez en tant que propriété:

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

EDIT : ajout d'un extrait de code au cas où le lien deviendrait périmé:

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;
    }
}
4
répondu mateuscb 2017-01-06 15:26:04

Si l'appelant est un autre projet, vous devez écrire la configuration dans le projet appelant pas celui appelé.

3
répondu Saber 2014-10-22 11:39:15

Ce problème se produit si ce projet est utilisé par un autre projet. Assurez-vous de copier les touches de réglage de l'application dans l'application du projet parent.config ou web.config.

0
répondu Karthikeyan Muthu 2013-11-15 07:05:18

Vous pouvez également essayer cette ligne pour obtenir la valeur de chaîne à partir du fichier app.config.

var strName= ConfigurationManager.AppSettings["stringName"];
0
répondu Ram Beer Singh 2014-11-21 16:08:57

Le chemin complet pour cela est

System.Configuration.ConfigurationManager.AppSettings["KeyName"]
0
répondu Siddhartha 2018-09-04 18:14:51

Il y aura deux Web.les fichiers de configuration. Je pense que vous avez peut-être confondu avec ces deux fichiers.

Vérifiez cette image:

cliquez sur ce lien et vérifiez cette image

Dans cette image, vous pouvez voir deux Web.les fichiers de configuration. Vous devez ajouter vos constantes à celle qui se trouve dans le dossier projet et non dans le dossier Vues

J'espère que cela peut vous aider

0
répondu raja gangadhar 2018-09-11 10:56:48

Désolé, je n'ai pas testé cela mais je pense que c'est fait comme ceci:

var filemap = new System.Configuration.ExeConfigurationFileMap();            
System.Configuration.Configuration config =  System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(filemap, System.Configuration.ConfigurationUserLevel.None);

//usage: config.AppSettings["xxx"]
-5
répondu Dubious 2014-11-21 13:37:44