Подтвердить что ты не робот

MVC 3 получает значения из AppSettings в web.config

В обычных сайтах веб-форм ASP.NET я бы использовал web.configs "appsettings", чтобы добавить данные настройки приложения на сайт. Однако при использовании MVC 3 я не могу получить значения настроек таким образом.

Во-первых, есть 2 файла web.config. Один в корне сайта, второй - в области "Виды". Я предполагаю, что хочу разместить информацию об appsettings в корневом файле web.config, правильно? (помещая его в другой под представлениями, кажется, возникает ошибка, указывающая, что "AppSettings" может появляться только один раз для веб-приложения.)

Когда я пытаюсь его восстановить (С#: System.Configuration.ConfigurationManager.AppSettings [ "SettingName" ]) Я получаю пустое или пустое/нулевое возвращаемое значение. Что я делаю неправильно?

Я должен упомянуть, что я действительно извлекаю эту информацию в файле класса в области "Модели" для установки определенных значений для модели с использованием get; задавать;. Возможно ли, что мне не разрешено делать это в моделях?

В Controller.cs:

WindowsLiveConnect.ServiceConfiguration WLSC = new WindowsLiveConnect.ServiceConfiguration();

ViewBag.ClientID = SC.ClientID; // This returns empty

В web.config

...

  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>

    <add key="ClientID" value="0000000040062A3F" />
    <add key="ClientSecret" value="SUPERSECRETPASSWORD" />
    <add key="RedirectURL" value="http%3A%2F%2Fwww.quilnet.com" />
  </appSettings>

...

В файле Model.cs:

        public class ServiceConfiguration
        {
            private string clientid;
            private string clientsecret;
            private string redirecturl;

            public string ClientID
            {

                get { return clientid; }

                set
                {
                    clientid = System.Configuration.ConfigurationManager.AppSettings["ClientID"];
                }
            }

            public string ClientSecret
            {

                get { return clientsecret; }

                set
                {
                    clientsecret = System.Configuration.ConfigurationManager.AppSettings["ClientSecret"];
                }
            }

            public string RedirectURL
            {

                get { return redirecturl; }

                set
                {
                    redirecturl = System.Configuration.ConfigurationManager.AppSettings["RedirectURL"];
                }
            }
        }
4b9b3361

Ответ 1

Обычно я использую статический класс AppSettings для доступа к этим параметрам. Что-то вроде этого:

public static class AppSettings 
{

    public static string ClientSecret
    {
        get
        {
            return Setting<string>("ClientSecret");
        }
    }

    private static T Setting<T>(string name)
    {
        string value = ConfigurationManager.AppSettings[name];

        if (value == null)
        {
            throw new Exception(String.Format("Could not find setting '{0}',", name));
        }

        return (T)Convert.ChangeType(value, typeof(T), CultureInfo.InvariantCulture);
    }
}

Ответ 2

Вы когда-нибудь звоните? Я предполагаю, что он никогда не вызывается, поэтому частная переменная никогда не получает значение из конфигурации.

Попробуйте это так (просто введите значение в get, не нужно):

public string ClientSecret
{    
  get { return System.Configuration.ConfigurationManager.AppSettings["ClientSecret"]; }    
}

Ответ 3

Я сделал это следующим образом:

myVar = System.Configuration.ConfigurationManager.AppSettings["ClientID"].ToString();

Ответ 4

Глядя на код, я предполагаю, что вы используете размещенные приложения поставщика sharepoint? Самое лучшее, что можно сделать здесь в mvc, - это игнорировать файл web.config, который находится на уровне представления, и использовать только тот, который находится в корневом каталоге веб-приложения.

Еще одна вещь, которую я хочу упомянуть, заключается в том, что, вероятно, не очень хорошая идея получить информацию о конфигурации из web.config в реальной модели. Его лучше переместить либо на: - конструктор контроллера - factory/репозиторий, который возвращает эту модель