Postie.AspNetCore.FluentValidation
1.0.1
dotnet add package Postie.AspNetCore.FluentValidation --version 1.0.1
NuGet\Install-Package Postie.AspNetCore.FluentValidation -Version 1.0.1
<PackageReference Include="Postie.AspNetCore.FluentValidation" Version="1.0.1" />
<PackageVersion Include="Postie.AspNetCore.FluentValidation" Version="1.0.1" />
<PackageReference Include="Postie.AspNetCore.FluentValidation" />
paket add Postie.AspNetCore.FluentValidation --version 1.0.1
#r "nuget: Postie.AspNetCore.FluentValidation, 1.0.1"
#:package Postie.AspNetCore.FluentValidation@1.0.1
#addin nuget:?package=Postie.AspNetCore.FluentValidation&version=1.0.1
#tool nuget:?package=Postie.AspNetCore.FluentValidation&version=1.0.1
Postie.AspNetCore.FluentValidation
Turns FluentValidation failures into proper HTTP responses. An IExceptionHandler that maps
FluentValidation.ValidationException to an RFC 9457 400 validation problem details response,
with failure messages grouped by property. Part of
Postie — free forever, MIT licensed.
dotnet add package Postie.AspNetCore.FluentValidation
Pairs naturally with Postie.Cqrs.FluentValidation
(whose pipeline behaviors throw ValidationException before a handler runs), but works with anything
that throws ValidationException — including MediatR validation behaviors.
Usage
This example maps endpoints with
Postie.Cqrs.AspNetCore and validates with
Postie.Cqrs.FluentValidation — but the
handler itself needs neither; it catches ValidationException wherever it is thrown from.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddPostie<CreateOrder>();
builder.Services.AddPostieValidation<CreateOrderValidator>(); // validation behaviors (Postie.Cqrs.FluentValidation)
builder.Services.AddPostieValidationExceptionHandler(); // ValidationException -> 400 problem details
var app = builder.Build();
app.UseExceptionHandler(); // required: the handler runs inside ASP.NET Core's exception middleware
app.MapCommand<CreateOrder, Order>("/orders")
.ProducesValidationProblem(); // advertise the 400 now that something produces it
app.Run();
An invalid CreateOrder now returns:
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"Customer": ["'Customer' must not be empty."]
}
}
The handler writes the response directly via Results.ValidationProblem, so CustomizeProblemDetails
hooks configured on AddProblemDetails do not run for these 400s.
Only ValidationException is handled; other exceptions flow to the rest of your exception-handling
pipeline unchanged.
License
MIT. See LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FluentValidation (>= 12.1.1)
-
net8.0
- FluentValidation (>= 12.1.1)
-
net9.0
- FluentValidation (>= 12.1.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.