Reading a key from the Web.Config using ConfigurationManager
I am trying to read the keys from the Web.config
file in a different layer than the web layer (Same solution)
Here is what I am trying:
string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"];
string password = System.Configuration.ConfigurationManager.AppSettings["PFPassWord"];
And here is my appSettings
in the Web.config
file:
<configuration>
....
<appSettings>
<add key="PFUserName" value="myusername"/>
<add key="PFPassWord" value="mypassword"/>
</appSettings>
....
</configuration>
When I debug the code username
and password
are just null
, so it is not getting the value of the keys.
What am I doing wrong to read these values?
Solution 1:
Try using the WebConfigurationManager class instead. For example:
string userName = WebConfigurationManager.AppSettings["PFUserName"]
Solution 2:
var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
Solution 3:
If the caller is another project, you should write the config in caller project not the called one.
Solution 4:
I found this solution to be quite helpful. It uses C# 4.0 DynamicObject to wrap the ConfigurationManager. So instead of accessing values like this:
WebConfigurationManager.AppSettings["PFUserName"]
you access them as a property:
dynamic appSettings = new AppSettingsWrapper();
Console.WriteLine(appSettings.PFUserName);
EDIT: Adding code snippet in case link becomes stale:
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;
}
}
Solution 5:
Full Path for it is
System.Configuration.ConfigurationManager.AppSettings["KeyName"]