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"];
}
}
}
Ответы
Ответ 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/репозиторий, который возвращает эту модель