Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Для работы с конфигурацией интерфейс 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; } } }