Работа с конфигурацией

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

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

Для работы с конфигурацией интерфейс IConfiguration определяет следующие методы:

  • GetSection(name): возвращает объект IConfiguration, который представляет только определенную секцию name

  • GetChildren(): возвращает все подсекции текущего объекта конфигурации в виде набора объектов IConfiguration

  • GetReloadToken(): возвращает токен - объект IChangeToken, который используется для уведомления при изменении конфигурации

  • GetConnectionString(name): эквивалентен вызову GetSection("ConnectionStrings")[name] и предназначается непосредственно для работы со строками подключения к различным базам даных

  • [key]: индексатор, который позволяет получить по определенному ключу key хранящееся значение

Например, если у нас есть следующая конфигурация:

{
  "ConnectionStrings": {
    "DefaultConnection": "Main database",
      "UsersContext": "Users database"
  }
}

То мы можем с помощью метода GetSection() получить отдельные секции и их значения:

IConfigurationSection connStrings = AppConfiguration.GetSection("ConnectionStrings");
string defaultConnection = connStrings.GetSection("DefaultConnection").Value;
app.Run(async (context) =>
{
    await context.Response.WriteAsync(defaultConnection);
});

Каждая отдельная секция представляет объект IConfigurationSection. Если секция содержит другие секция, то также можем вызвать у ней метод GetSection(). Если же секция содержит только значение, то оно доступно через свойство Value.

Также мы могли бы использовать один вызов GetSection(), передав ему полный путь к нужной секции:

string con = AppConfiguration.GetSection("ConnectionStrings:DefaultConnection").Value;

Вложенные секции от родительских отделяются двоеточием.

Также мы могли бы получить нужное значение, используя индексаторы:

string con = AppConfiguration["ConnectionStrings:DefaultConnection"];

Ну и кроме того, для работы непосредственно с секцией "ConnectionStrings" нам доступен метод GetConnectionString():

string con = AppConfiguration.GetConnectionString("DefaultConnection");

Используя выше рассмотренные методы, мы можем провести анализ всего файла конфигурации. Например, пусть в проекте определен следующий конфигурационный файл project.json:

{
  "dependencies": {
    "Microsoft.Extensions.Configuration": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",

    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Logging.Console": "1.0.0"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

Проанализируем и выведем все его содержимое в браузере:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

namespace ConfigurationApp
{
    public class Startup
    {
        public Startup()
        {
            var builder = new ConfigurationBuilder()
                .AddJsonFile("project.json");
            AppConfiguration = builder.Build();
        }
        public IConfiguration AppConfiguration { get; set; }

        public void Configure(IApplicationBuilder app)
        {
            string projectJsonContent = GetSectionContent(AppConfiguration);
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("{\n" + projectJsonContent + "}");
            });
        }

        private string GetSectionContent(IConfiguration configSection)
        {
            string sectionContent = "";
            foreach (var section in configSection.GetChildren())
            {
                sectionContent += "\"" + section.Key + "\":";
                if(section.Value==null)
                {
                    string subSectionContent = GetSectionContent(section);
                    sectionContent += "{\n" + subSectionContent + "},\n";
                }
                else
                {
                    sectionContent += "\"" + section.Value + "\",\n";
                }
            }
            return sectionContent;
        }
    }
}
Конфигурация json в ASP.NET Core MVC
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850