TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #1767 1.57K
День 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
  • 👍 29
More from @netdeveloperdiary
  1. Sep 28, 2026День 2798. #Оффтоп Утиная Типизация в C# с Помощью Перехватчиков. Часть 2 Некоторое время…
  2. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  3. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  4. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  5. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  6. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →