- удалён устаревший пакет FluentValidation.AspNetCore, вызывавший конфликт версий (NU1605) - реализован глобальный фильтр AsyncValidationFilter для поддержки MustAsync-правил
59 lines
2.6 KiB
C#
59 lines
2.6 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Настройка валидаторов
|
|
/// </summary>
|
|
public static class ConfigureValidator
|
|
{
|
|
/// <summary>
|
|
/// Подключить конфигурацию валидаторов
|
|
/// </summary>
|
|
/// <param name="services"></param>
|
|
/// <returns></returns>
|
|
public static IServiceCollection AddValidatorServices(this IServiceCollection services)
|
|
{
|
|
services.AddExceptionHandler<GlobalExceptionHandler>(); // регим GlobalExceptionHandler
|
|
services.AddProblemDetails(); // Генерирует стандартный формат ошибки RFC 7807
|
|
|
|
// Настройка контроллеров и кастомного формата ошибок валидации
|
|
services.AddControllers(options =>
|
|
{
|
|
// Автоматически применяем асинхронную валидацию ко всем контроллерам
|
|
options.Filters.Add<AsyncValidationFilter>();
|
|
})
|
|
.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<AsyncValidationFilter>();
|
|
|
|
|
|
return services;
|
|
}
|
|
}
|
|
}
|