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?
9 réponses
Essayez d'utiliser la classe WebConfigurationManager à la place. Par exemple:
string userName = WebConfigurationManager.AppSettings["PFUserName"]
var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
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;
}
}
Si l'appelant est un autre projet, vous devez écrire la configuration dans le projet appelant pas celui appelé.
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.
Vous pouvez également essayer cette ligne pour obtenir la valeur de chaîne à partir du fichier app.config
.
var strName= ConfigurationManager.AppSettings["stringName"];
Le chemin complet pour cela est
System.Configuration.ConfigurationManager.AppSettings["KeyName"]
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:
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
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"]