Чтение ключа из Web.Config с использованием ConfigurationManager
Я пытаюсь прочитать ключи от Web.config
файл в другом слое, чем веб-слой (то же решение)
Вот что я пытаюсь:
string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"];
string password = System.Configuration.ConfigurationManager.AppSettings["PFPassWord"];
А вот мой appSettings
в Web.config
файл:
<configuration>
....
<appSettings>
<add key="PFUserName" value="myusername"/>
<add key="PFPassWord" value="mypassword"/>
</appSettings>
....
</configuration>
Когда я отлаживаю код username
а также password
просто null
, поэтому он не получает значения ключей.
Что я делаю не так, чтобы прочитать эти значения?
9 ответов
Попробуйте вместо этого использовать класс WebConfigurationManager. Например:
string userName = WebConfigurationManager.AppSettings["PFUserName"]
var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
Если вызывающий объект - другой проект, вы должны написать конфигурацию в вызывающем проекте, а не вызываемом.
Я нашел это решение весьма полезным. Он использует C# 4.0 DynamicObject, чтобы обернуть ConfigurationManager. Так что вместо доступа к значениям, как это:
WebConfigurationManager.AppSettings["PFUserName"]
Вы получаете доступ к ним как к собственности:
dynamic appSettings = new AppSettingsWrapper();
Console.WriteLine(appSettings.PFUserName);
РЕДАКТИРОВАТЬ: Добавление фрагмента кода в случае, если ссылка становится устаревшей:
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;
}
}
Полный путь для этого
System.Configuration.ConfigurationManager.AppSettings["KeyName"]
Там будет два файла Web.config. Я думаю, что вы, возможно, перепутали эти два файла.
Проверьте это изображение:
На этом изображении вы видите два файла Web.config. Вы должны добавить свои константы к той, которая находится в папке проекта, а не в папке представлений
Надеюсь, это поможет вам
Также вы можете попробовать эту строку, чтобы получить строковое значение из app.config
файл.
var strName= ConfigurationManager.AppSettings["stringName"];
Эта проблема возникает, если этот проект используется другим проектом. Убедитесь, что вы скопировали ключи настроек приложения в app.config или web.config родительского проекта.
С учетом нижеприведенной настройки в файле.config:
<configuration>
<appSettings>
<add key="PFUserName" value="myusername"/>
<add key="PFPassWord" value="mypassword"/>
</appSettings>
</configuration>
попробуй это:
public class myController : Controller
{
NameValueCollection myKeys = ConfigurationManager.AppSettings;
public void MyMethod()
{
var myUsername = myKeys["PFUserName"];
var myPassword = myKeys["PFPassWord"];
}
}
Извините, я не проверял это, но я думаю, что это сделано так:
var filemap = new System.Configuration.ExeConfigurationFileMap();
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(filemap, System.Configuration.ConfigurationUserLevel.None);
//usage: config.AppSettings["xxx"]