using FluentValidation; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Infrastructure.Filters; using PARR.API.Infrastructure.Middleware; namespace PARR.API.Infrastructure { /// /// Настройка валидаторов /// public static class ConfigureValidator { /// /// Подключить конфигурацию валидаторов /// /// /// public static IServiceCollection AddValidatorServices(this IServiceCollection services) { services.AddExceptionHandler(); // регим GlobalExceptionHandler services.AddProblemDetails(); // Генерирует стандартный формат ошибки RFC 7807 // Настройка контроллеров и кастомного формата ошибок валидации services.AddControllers(options => { // Автоматически применяем асинхронную валидацию ко всем контроллерам options.Filters.Add(); }) .ConfigureApiBehaviorOptions(options => { options.InvalidModelStateResponseFactory = context => { // наша стандартная модель ошибок var errors = context.ModelState.Values .SelectMany(t => t.Errors) .Select(t => new ErrorModel { Message= t.ErrorMessage }) .ToList(); return new BadRequestObjectResult( new Response( false, errors)); }; }); // Регистрируем валидаторы API. // Просканирует всю сборку API (где лежит Program.cs) и найдет там валидаторы services.AddValidatorsFromAssembly(typeof(Program).Assembly); //services.AddValidatorsFromAssemblies(Assembly.GetExecutingAssembly()); // Включаем авто-валидацию FluentValidation для контроллеров //services.AddFluentValidationAutoValidation(); services.AddScoped(); return services; } } }