Интеграция проверки с API
Возвращайте понятные ответы с ошибками проверки.
«Интеграция проверки с API» — бесплатный урок C# Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Подключение FluentValidation к ASP.NET Core
Чтобы автоматически проверять запросы, зарегистрируйте валидаторы через внедрение зависимостей. Вспомогательный метод AddValidatorsFromAssembly сканирует сборку и регистрирует каждый найденный валидатор.
using FluentValidation;
builder.Services
.AddValidatorsFromAssemblyContaining<CustomerValidator>();Промежуточное ПО для автоматической проверки
Современный FluentValidation рекомендует явную проверку, но вы можете включить автоматическую проверку, подключаемую к привязке модели, чтобы недействительные запросы отклонялись ещё до запуска вашего действия.
dotnet add package FluentValidation.AspNetCore
builder.Services.AddFluentValidationAutoValidation();Получение валидаторов через DI
Поскольку валидаторы зарегистрированы через DI, они могут внедрять такие службы, как репозитории, благодаря чему асинхронные правила с обращением к базе данных без проблем работают в вашем API.
public class UserValidator : AbstractValidator<UserRequest>
{
public UserValidator(IUserRepository repo)
{
RuleFor(u => u.Email)
.MustAsync(async (e, ct) => !await repo.ExistsAsync(e));
}
}Явная проверка в конечной точке
Многие команды предпочитают явную проверку для большей понятности. Внедрите IValidator<T> и вызовите его в начале обработчика.
app.MapPost("/users", async (
UserRequest request,
IValidator<UserRequest> validator) =>
{
var result = await validator.ValidateAsync(request);
if (!result.IsValid)
return Results.ValidationProblem(result.ToDictionary());
return Results.Ok();
});Что такое ProblemDetails
ProblemDetails (RFC 7807) — это стандартный формат JSON для HTTP-ответов с ошибками. Он содержит такие поля, как type, title, status и detail, благодаря чему клиенты получают предсказуемую структуру ошибки.
{
"type": "https://tools.ietf.org/html/rfc7231",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": { "Email": ["Email is required."] }
}ValidationProblemDetails
Для ошибок проверки ASP.NET Core использует ValidationProblemDetails, который расширяет ProblemDetails словарём errors, сопоставляющим каждое поле с его сообщениями.
return Results.ValidationProblem(result.ToDictionary());
// Produces a 400 ValidationProblemDetails responseПреобразование результатов FluentValidation
Расширение ToDictionary() преобразует ValidationResult в словарь field -> messages, который ожидает ValidationProblem.
var result = await validator.ValidateAsync(request);
if (!result.IsValid)
{
IDictionary<string, string[]> errors = result.ToDictionary();
return Results.ValidationProblem(errors);
}Настройка вывода ProblemDetails
Используйте AddProblemDetails и собственный настройщик, чтобы обогатить каждый ответ с ошибкой, например добавив идентификатор трассировки для отладки.
builder.Services.AddProblemDetails(options =>
{
options.CustomizeProblemDetails = ctx =>
ctx.ProblemDetails.Extensions["traceId"] =
ctx.HttpContext.TraceIdentifier;
});Проверка данных в контроллерах MVC
При включённой автоматической валидации и [ApiController] методы действий контроллера также автоматически возвращают ValidationProblemDetails, если запрос недействителен, поэтому формат остаётся единообразным во всех конечных точках.
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
[HttpPost]
public IActionResult Create(UserRequest request) => Ok();
}Фильтр валидации для минимальных API
Вы можете централизовать явную валидацию с помощью фильтра конечной точки, чтобы каждый обработчик оставался простым.
app.MapPost("/users", (UserRequest r) => Results.Ok())
.AddEndpointFilter<ValidationFilter<UserRequest>>();Автоматическая или явная валидация
Автоматическая валидация удобна, но скрывает шаг проверки; явная многословна, зато прозрачна и её проще проверять. Многие команды выбирают явную валидацию вместе с общим фильтром, получая преимущества обоих подходов.
Быстрая проверка
Проверьте интеграцию валидации API.
Итоги
Интеграция валидации означает регистрацию валидаторов с помощью AddValidatorsFromAssembly, возможное включение автоматической валидации и возврат ошибок в виде ValidationProblemDetails через Results.ValidationProblem(result.ToDictionary()). DI позволяет валидаторам использовать репозитории для асинхронных правил, а настроить ProblemDetails или применить фильтры конечных точек можно для упрощения обработчиков.
Изучай C# с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 93
- Уроки
- 346
Часто задаваемые вопросы
Урок «Интеграция проверки с API» бесплатный?
Да — полный текст урока «Интеграция проверки с API» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Интеграция проверки с API»?
Возвращайте понятные ответы с ошибками проверки. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Интеграция проверки с API»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проверка с помощью аннотаций данных
- Правила FluentValidation
- Пользовательские и условные правила
- Интеграция проверки с API