Как создать собственный поставщик конфигурации в ASP.NET Core 6

автор vadim


Мы используем поставщиков конфигурации в ASP.NET Core для загрузки данных конфигурации в наше приложение из одного или нескольких источников конфигурации. Эти поставщики могут считывать данные конфигурации из аргументов командной строки, переменных среды, файлов JSON или XML, баз данных, Azure Key Vault и других источников, включая ваши собственные источники.

Система конфигурации ASP.NET Core включает набор классов, которые упрощают управление параметрами конфигурации вашего приложения. Эта система является легкой и расширяемой и обеспечивает согласованный способ хранения и получения параметров конфигурации для всех приложений ASP.NET Core.

Для настраиваемых источников конфигурации вы можете создать собственный поставщик настраиваемой конфигурации в ASP.NET Core и прикрепить его к системе конфигурации. Поставщик пользовательской конфигурации может помочь вам упростить загрузку метаданных конфигурации из пользовательских источников конфигурации или внешних источников.

В этой статье представлено обсуждение того, как мы можем создать собственный поставщик конфигурации в ASP.NET Core 6. Для работы с примерами кода, представленными в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Создайте проект веб-API ASP.NET Core 6 в Visual Studio 2022.

Прежде всего давайте создадим проект ASP.NET Core в Visual Studio 2022. Выполнение этих шагов позволит создать новый проект веб-API ASP.NET Core 6 в Visual Studio 2022:

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В показанном ниже окне «Дополнительная информация» выберите .NET 6.0 в качестве целевой платформы из раскрывающегося списка вверху. Оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию).
  9. Убедитесь, что флажки «Включить Docker», «Настроить HTTPS» и «Включить поддержку Open API» сняты, поскольку мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

Мы будем использовать этот проект веб-API ASP.NET Core 6 для создания настраиваемого поставщика конфигурации в последующих разделах этой статьи.

Создание поставщиков конфигурации в ASP.NET Core 6

Поставщик конфигурации обычно представляет собой класс C#, который может получать данные конфигурации из источника (файла, базы данных, внешнего API и т. д.) и делать их доступными для приложения. В ASP.NET Core имеется множество встроенных поставщиков конфигурации, включая поставщиков JSON, XML и баз данных. Однако при необходимости вы также можете создать своего собственного поставщика конфигурации.

Чтобы создать собственный поставщик конфигурации, необходимо создать класс, расширяющий класс ConfigurationProvider. Затем вам необходимо переопределить метод Load(), чтобы загрузить данные конфигурации из любого места, где они хранятся, и вернуть данные в виде словаря значений ключа.

Создав собственный поставщик конфигурации, вы можете зарегистрировать его в ASP.NET Core, добавив его в коллекцию служб в файле Program.cs.

пользовательский поставщик конфигурации 01 ИДГ

Рис. 1. Окно Solution Explorer завершенного приложения.

Давайте теперь начнем создавать собственный поставщик конфигурации в ASP.NET 6 Core. Окончательное решение будет состоять из следующих файлов:

  • SecurityMetadata.cs
  • CustomConfigurationSource.cs
  • CustomConfigurationProvider.cs
  • CustomConfigurationExtensions.cs
  • CustomConfigurationController.cs

Мы узнаем о каждом из этих файлов в следующих разделах. Кроме того, мы также напишем код в файле Program.cs, чтобы добавить поставщика конфигурации и источник конфигурации в систему конфигурации по умолчанию среды выполнения ASP.NET Core. Окно Solution Explorer завершенного приложения должно выглядеть так, как показано на рисунке 1 выше.

Создайте класс для метаданных безопасности в ASP.NET Core 6.

Мы будем хранить ключи API и секреты API в файле .json и читать его в приложении, которое мы здесь создадим. В этом примере мы не будем использовать ни один из этих ключей для аутентификации или авторизации запросов.

Ключи API и секреты API используются для аутентификации доступа к API. Основное отличие состоит в том, что ключи API являются общедоступными и доступны любому, тогда как секреты API являются частными и никогда не должны разглашаться. Ключ API — это идентификатор, который позволяет вам безопасно взаимодействовать с API.

Ключи API используются для ограничения того, кто может использовать приложение и что они могут с ним делать; т.е. они используются для аутентификации и авторизации запросов. Секреты API используются для хранения конфиденциальной информации в вашем приложении. Вы также можете использовать секреты API для генерации контрольных сумм, а также для шифрования и расшифровки данных.

Создайте класс с именем SecurityMetadata в файле с тем же именем и расширением .cs и введите следующий код.

   public class SecurityMetadata
    {
        public string ApiKey { get; set; }        
        public string ApiSecret { get; set; }
    }

Создайте класс для источника конфигурации в ASP.NET Core 6.

Далее мы создадим источник конфигурации для инициализации нашего пользовательского поставщика конфигурации. Для этого создайте новый CS-файл с именем CustomConfigurationSource и добавьте в него следующий код.

    public class CustomConfigurationSource : IConfigurationSource
    {
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new CustomConfigurationProvider();
        }
    }

Ваш пользовательский источник конфигурации должен реализовывать интерфейс IConfigurationSource. Интерфейс IConfigurationSource содержит метод Build, в котором вы должны вызвать свой собственный поставщик конфигурации.

Создайте собственный поставщик конфигурации в ASP.NET Core 6.

Чтобы прочитать информацию о конфигурации из внешнего источника данных, необходимо реализовать собственный поставщик конфигурации. Ваш пользовательский поставщик конфигурации — это обычный класс C#, который расширяет абстрактный класс Microsoft.Extensions.Configuration.ConfigurationProvider и переопределяет метод Load(), как показано в листинге кода, приведенном ниже.

    public class CustomConfigurationProvider :
    Microsoft.Extensions.Configuration.ConfigurationProvider
    {
        public override void Load()
        {
            var text = File.ReadAllText(@"D:\SecurityMetadata.json");
            var options = new JsonSerializerOptions
            { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
            var content = JsonSerializer.Deserialize<SecurityMetadata>
           (text, options);
            if (content != null)
            {
                Data = new Dictionary<string, string>
                {
                    {"ApiKey", content.ApiKey},
                    {"ApiSecret", content.ApiSecret}
                };
            }
        }
    }

Обратите внимание, как ApiKey и ApiSecret хранятся в экземпляре словаря с именем Data.

Создайте класс расширений пользовательской конфигурации в ASP.NET Core 6.

Теперь мы создадим метод расширения, который создаст экземпляр класса CustomConfigurationSource и вернет его.

    public static class CustomConfigurationExtensions
    {
        public static IConfigurationBuilder AddSecurityConfiguration
        (this IConfigurationBuilder builder)
        {
            return builder.Add(new CustomConfigurationSource());
        }
    }

Добавьте источник пользовательской конфигурации в Program.cs в ASP.NET Core 6.

Теперь введите следующую строку кода в файл Program.cs, чтобы добавить настраиваемый источник конфигурации в коллекцию поставщиков конфигурации.

builder.Configuration.AddSecurityConfiguration();

Полный листинг кода файла Program.cs приведен ниже для справки.

using CustomConfigurationProvider;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Configuration.AddSecurityConfiguration();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();

Создайте собственный контроллер конфигурации в ASP.NET Core 6.

Наконец, создайте новый контроллер API с именем CustomConfigurationController и замените сгенерированный по умолчанию код следующим листингом кода.

    [Route("api/[controller]")]
    [ApiController]
    public class CustomConfigurationController : ControllerBase
    {
        private readonly IConfiguration _configuration;
        public CustomConfigurationController(IConfiguration configuration)
        {
            _configuration = configuration;
        }
        [HttpGet]
        public IActionResult Get()
        {
            var metadata = new SecurityMetadata
            {
                ApiKey = _configuration["ApiKey"],
                ApiSecret = _configuration["ApiSecret"]
            };
            return Ok(metadata);
        }
    }

Обратите внимание, как экземпляр IConfiguration внедряется в конструктор класса CustomConfigurationController.

Если теперь вы запустите приложение и попадете в конечную точку HttpGet CustomConfigurationController, вы увидите, что данные конфигурации возвращаются после их чтения из файла .json в файловой системе. Чтобы проверить это, установите точку останова в методе действия HttpGet CustomConfigurationController, как показано на рисунке 2 ниже.

пользовательский поставщик конфигурации 02 ИДГ

Рисунок 2. ApiKey и ApiSecret возвращаются из метода действия HttpGet.

В этом посте мы реализовали собственный поставщик конфигурации, который может считывать данные конфигурации из файла .json. Обратите внимание, что мы выполнили приложение непосредственно из Visual Studio 2022 IDE и установили точку останова, чтобы проверить, правильно ли возвращаются данные конфигурации. Альтернативно вы можете запустить приложение с помощью Postman, Fiddler или пользовательского интерфейса Swagger.

Related Posts

Оставить комментарий