Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Зачастую для хранения конфигурации в ASP.NET Core используются файлы json. Для работы с файлами json применяется провайдер JsonConfigurationProvider, а для загрузки конфигурации из json для класса ConfigurationBuilder доступен метод расширения AddJsonFile().
По умолчанию в проекте уже есть файл конфигурации json - appsettings.json, а также appsettings.Development.json, которые загружаются по умолчанию в приложении и которые мы можем использовать для хранения конфигурационных настроек. Например, код файла appsettings.json:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
Здесь определяются настройки логгирования (элемент "Logging") и разрешенные хосты (элемент "AllowedHosts"). Одни элементы могут иметь вложенные элементы. Аналогичным образом можно задать другие необходимые настройки или удалить ранее определенные.
Однако в данном случае для примера возьмем новый файл json. Итак, добавим в проект новый файл conf.json:
И определим в нем следующее содержимое:
{ "color": "red", "text": "welcome!" }
Здесь задается два элемента с ключами color и text. Затем используем этот файл в классе Startup:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; namespace ConfigurationApp { public class Startup { public Startup() { var builder = new ConfigurationBuilder().AddJsonFile("conf.json"); AppConfiguration = builder.Build(); } // свойство, которое будет хранить конфигурацию public IConfiguration AppConfiguration { get; set; } public void Configure(IApplicationBuilder app) { var color = AppConfiguration["color"]; var text = AppConfiguration["text"]; app.Run(async (context) => { await context.Response.WriteAsync($"<p style='color:{color};'>{text}</p>"); }); } } }
Для установки конфигурации из json-файла нам надо передать его название в метод builder.AddJsonFile()
. Затем в методе Configure настройки конфигурации используются для создания html-разметки, которая отправляется в ответ клиенту.
При определении настроек в файле json нам надо учитывать, что они должны иметь уникальные ключи. Но при этом мы можем использовать для конфигурации более чем одного файла:
var builder = new ConfigurationBuilder() .AddJsonFile("conf.json") .AddJsonFile("myconfig.json");
И если во втором файле есть настройки, которые имеют тот же ключ, что и настройки первого файла, то происходит переопределение настроек: настройки из второго файла заменяют настройки первого.
Но json может хранить также более сложные по составу объекты, например:
{ "color": "red", "namespace": { "class": { "method": "AddJson" } } }
И чтобы обратиться к этой настройке, нам надо использовать знак двоеточия для обращения к иерархии настроек:
string text = AppConfiguration["namespace:class:method"];
За использование конфигурации в XML-файле отвечает провайдер XmlConfigurationProvider. Для загрузки xml-файла применяется метод расширения AddXmlFile().
Итак, добавим в проект новый xml-файл, который назовем config.xml. Затем изменим его код на следующий:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <color>blue</color> <text>Hello ASP.NET</text> </configuration>
Здесь определены два элемента color и text, которые представляют конфигурационные настройки.
Обратите внимание, что у файла xml в свойствах должно быть выставлено копирование при компиляции в выходную папку приложения:
Теперь используем этот файл:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; namespace ConfigurationApp { public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddXmlFile("config.xml"); AppConfiguration = builder.Build(); } public IConfiguration AppConfiguration { get; set; } public void Configure(IApplicationBuilder app) { var color = AppConfiguration["color"]; var text = AppConfiguration["text"]; app.Run(async (context) => { await context.Response.WriteAsync($"<p style='color:{color};'>{text}</p>"); }); } } }
Если у нас файл конфигурации имеет разные уровни вложенности, например:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <color>blue</color> <text> <description> <data>Hello ASP.NET Core</data> </description> </text> </configuration>
то мы можем обращаться к этим уровням также, как и в файле json. Например, получение текста из элемента text->description->data:
var text = AppConfiguration["text:description:data"];
Для работы с конфигурацией INI применяется провайдер IniConfigurationProvider. А для загрузки конфигурации из INI-файла нам надо использовать метод расширения AddIniFile().
Например, добавим в проект текстовый файл и переименуем его в conf.ini. Определим в нем следующее содержимое:
color="blue" text="Hello ASP.NET Core 2.0"
Как и в случае с xml-файлом необходимо указать копирование в целевой каталог приложения.
Подключим этот файл в классе Startup:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; namespace ConfigurationApp { public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddIniFile("conf.ini"); AppConfiguration = builder.Build(); } public IConfiguration AppConfiguration { get; set; } public void Configure(IApplicationBuilder app) { var color = AppConfiguration["color"]; var text = AppConfiguration["text"]; app.Run(async (context) => { await context.Response.WriteAsync($"<p style='color:{color};'>{text}</p>"); }); } } }