Замена стандартных ответов ASP.NET Core об ошибках валидации (Fluent Validation)
В проекте используется валидация при помощи Fluent Validation. Валидаторы созданы, в проект подключены так:
builder.Services.AddFluentValidationAutoValidation();
builder.Services.AddValidatorsFromAssemblyContaining<CreateJobRequestValidator>();
Валидация работает, но в ответ возвращаются не красивые и громоздкие ответы от ASP.NET, по типу:
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"Title": [
"'Title' должно быть заполнено."
]
},
"traceId": "00-44dde947b4baa88fc2790cfedb7a915a-201a597b99371ad7-00"
}
В проекте у меня всё в случае чего выбрасывает исключения и они ловятся в кастомном midlleweare. Когда я добавляю примерно такое:
catch (ValidationException ex)
{
context.Response.StatusCode = StatusCodes.Status400BadRequest;
var errors = ex.Errors
.GroupBy(e => e.PropertyName)
.ToDictionary(
g => g.Key,
g => g.Select(e => e.ErrorMessage).ToArray()
);
await context.Response.WriteAsJsonAsync(new { message = "Validation failed", errors });
}
И отключаю стандартные ошибки от ASP.NET вот так
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
То валидация вообще перестаёт работать
Источник: Stack Overflow на русском