Как считывать значения AppSettings из файла .json в ASP.NET Core

  • Михаил
  • 12 мин. на прочтение
  • 163
  • 20 Jun 2022
  • 21 Nov 2022

Для работы с настройками в вашем ASP.NET приложение, рекомендуется создавать экземпляр конфигурации только в классе запуска вашего приложения. Затем используйте шаблон параметров для доступа к отдельным настройкам. Допустим, у нас есть файл appsettings.json, который выглядит следующим образом:

{
  "MyConfig": {
   "ApplicationName": "MyApp",
   "Version": "1.0.0"
   }

}

И у нас есть объект POCO, представляющий конфигурацию:

public class MyConfig
{
    public string ApplicationName { get; set; }
    public int Version { get; set; }
}

Теперь мы создаем конфигурацию в Startup.cs:

public class Startup 
{
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();
    }
}

Обратите внимание, что appsettings.json будет зарегистрирован по умолчанию в .NET Core 2.0. Мы также можем зарегистрировать appsettings.{Environment}.json конфигурационный файл для каждой среды, если это необходимо.

Если мы хотим внедрить нашу конфигурацию в наши контроллеры, нам нужно будет зарегистрировать ее во время выполнения. Мы делаем это через Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    // Add functionality to inject IOptions
    services.AddOptions();

    // Add our Config object so it can be injected
    services.Configure(Configuration.GetSection("MyConfig"));
}

И мы вводим его вот так:

public class HomeController : Controller
{
    private readonly IOptions config;

    public HomeController(IOptions config)
    {
        this.config = config;
    }

    // GET: //
    public IActionResult Index() => View(config.Value);
}

Полный Startup класс:

public class Startup 
{
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // Add functionality to inject IOptions
        services.AddOptions();

        // Add our Config object so it can be injected
        services.Configure(Configuration.GetSection("MyConfig"));
    }
}