Файловые провайдеры конфигурации

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 14.11.2019

Конфигурация в JSON

Зачастую для хранения конфигурации в 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:

Конфигурация json в ASP.NET Core

И определим в нем следующее содержимое:

{
  "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

За использование конфигурации в 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 в свойствах должно быть выставлено копирование при компиляции в выходную папку приложения:

XML configuration in ASP.NET Core

Теперь используем этот файл:

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-файлах

Для работы с конфигурацией 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>");
            });
        }
    }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850