C# Academy · Урок

Интеграция проверки с API

Возвращайте понятные ответы с ошибками проверки.

Урок 4 из 413 шагов

«Интеграция проверки с 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 — локальная установка не требуется.

Все уроки этого курса

  1. Проверка с помощью аннотаций данных
  2. Правила FluentValidation
  3. Пользовательские и условные правила
  4. Интеграция проверки с API
← Назад к C# Academy