День 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