Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1435. #ЗаметкиНаПолях Проверка Конфигурации .NET Одна из замечательных особенностей системы конфигурации в .NET — безопасность типов, внедрение зависимостей и привязка модели. Поэтому мы можем проверить нашу конфигурацию при запуске и завершить работу, если проверка не пройдёт. Это полезно при работе с контейнерами и приложениями, которые имеют тесты живучести и готовности. Начнём с некоторой конфигурации, которую мы хотим проверить, и завершить работу в случае неудачи:
"WebHook": {
  "WebhookUrl": "https://example.com/event",
  "DisplayName": "DevOps",
  "Enabled": true
}

Как убедиться, что URL-адрес действителен? Мы можем создать строго типизированный класс и добавить проверку свойств, используя аннотации данных. Существует множество встроенных атрибутов, таких как StringLength, Range, EmailAddress и другие. Их можно найти в документации.
using System.ComponentModel.DataAnnotations;

public class WebHookSettings
{
  [Required, Url]
  public string WebhookUrl { get; set; }
  [Required]
  public string DisplayName { get; set; }
  public bool Enabled { get; set; }
}

Теперь всё, что нам остаётся, вызвать несколько методов расширения на построителе приложения:
using System.ComponentModel.DataAnnotations;
using Microsoft.Extensions.Options;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOptions<WebHookSettings>()
  .BindConfiguration("WebHook")
  .ValidateDataAnnotations()
  .ValidateOnStart();

Таким образом мы выполним проверку аннотаций данных при старте приложения. Также можно добавлять пользовательские проверки. Допустим, мы хотим, чтобы WebhookUrl всегда начинался с https. Нам нужно добавить вызов метода расширения Validate:
builder.Services.AddOptions<WebHookSettings>()
  .BindConfiguration("WebHook")
  .ValidateDataAnnotations()
  .Validate(s =>
    {
      return s.WebhookUrl.StartsWith("https://");
    }, "WebHookUrl must start with https://")
  .ValidateOnStart();

Теперь если мы запустим приложение с такой конфигурацией:
"WebHook": {
  "WebhookUrl": "http://example.com/event",
  "DisplayName": "DevOps",
  "Enabled": true
}

то при старте получим ошибку
Unhandled exception. Microsoft.Extensions.Options.OptionsValidationException: WebHookUrl must start with https://

Когда вы создаёте приложения, подумайте о добавлении проверки, чтобы убедиться, что ваши приложения имеют действительную конфигурацию при запуске. Наличие ошибок времени выполнения из-за конфигурации является раздражающей, а иногда и сложной для отладки проблемой. Подробности о конфигурации .NET описаны в документации, а также посмотрите на паттерн Options. Источник: https://chris-ayers.com/2022/12/03/validating-dotnet-configuration