Чтение ключа из 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, поэтому он не получает значения ключей.

Что я делаю неправильно, чтобы прочитать эти значения?

Ответ 1

Попробуйте вместо этого использовать класс WebConfigurationManager. Например:

string userName = WebConfigurationManager.AppSettings["PFUserName"]

Ответ 2

  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];

Ответ 3

Если вызывающий объект представляет собой другой проект, вы должны написать конфигурацию в проекте-вызывателе, а не вызываемый.

Ответ 4

Я нашел это решение весьма полезным. Он использует С# 4.0 DynamicObject для переноса ConfigurationManager. Поэтому вместо доступа к таким значениям:

 WebConfigurationManager.AppSettings["PFUserName"]

вы получаете доступ к ним как к свойству:

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

EDIT: добавление фрагмента кода в случае, если ссылка становится устаревшей:

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;
    }
}

Ответ 5

Эта проблема возникает, если этот проект используется другим проектом. Убедитесь, что вы скопировали ключи приложения в родительский проект app.config или web.config.

Ответ 6

Также вы можете попробовать эту строку, чтобы получить строковое значение из файла app.config.

var strName= ConfigurationManager.AppSettings["stringName"];

Ответ 7

Извините, я не тестировал это, но я думаю, что он сделал вот так:

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

//usage: config.AppSettings["xxx"]