Files
parr_api/PARR.API/Infrastructure/ConfigureValidator.cs

52 lines
2.3 KiB
C#

using FluentValidation;
using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Mvc;
using PARR.API.Contracts.V1.Responses.Base;
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()
.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();
return services;
}
}
}