MicroElements.Swashbuckle.FluentValidation 7.2.4

Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package MicroElements.Swashbuckle.FluentValidation --version 7.2.4
                    
NuGet\Install-Package MicroElements.Swashbuckle.FluentValidation -Version 7.2.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MicroElements.Swashbuckle.FluentValidation" Version="7.2.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MicroElements.Swashbuckle.FluentValidation" Version="7.2.4" />
                    
Directory.Packages.props
<PackageReference Include="MicroElements.Swashbuckle.FluentValidation" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MicroElements.Swashbuckle.FluentValidation --version 7.2.4
                    
#r "nuget: MicroElements.Swashbuckle.FluentValidation, 7.2.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package MicroElements.Swashbuckle.FluentValidation@7.2.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MicroElements.Swashbuckle.FluentValidation&version=7.2.4
                    
Install as a Cake Addin
#tool nuget:?package=MicroElements.Swashbuckle.FluentValidation&version=7.2.4
                    
Install as a Cake Tool

Swagger ISchemaFilter that uses FluentValidation validators instead System.ComponentModel based attributes.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (52)

Showing the top 5 NuGet packages that depend on MicroElements.Swashbuckle.FluentValidation:

Package Downloads
Reo.Core.Queue.RabbitMq

Package Description

Reo.Core.Email

Package Description

Mii.Rinjani.Gateway.Commons

Package Description

H21.AspNetCore.Validation

Package Description

WalletFramework.AspNetCore.Contracts

Api Library

GitHub repositories (4)

Showing the top 4 popular GitHub repositories that depend on MicroElements.Swashbuckle.FluentValidation:

Repository Stars
AlphaYu/adnc
A pragmatic .NET 8 framework for modular monoliths to evolve seamlessly into distributed microservices.
AntonioFalcaoJr/EventualShop
A state-of-the-art distributed system using Reactive DDD as uncertainty modeling, Event Storming as subdomain decomposition, Event Sourcing as an eventual persistence mechanism, CQRS, Async Projections, Microservices for individual deployable units, Event-driven Architecture for efficient integration, and Clean Architecture as domain-centric design
nhonvo/clean-architecture-net-8.0
Clean Architecture Web API Project
melikpehlivanov/AuctionSystem
Auction system written in ASP.NET Core
Version Downloads Last Updated
7.3.0-beta.1 69 10/31/2026
7.2.4 771 11/3/2026
7.2.3 3,059 10/31/2026
7.2.2 263,879 8/21/2026
7.2.1 287,702 7/13/2026
7.2.0 7,970 7/12/2026
7.1.11 13,229 7/12/2026
7.1.10 1,178 7/12/2026
7.1.9 23,193 7/9/2026
7.1.8 41,457 7/1/2026
7.1.8-beta.2 530 6/21/2026
7.1.8-beta.1 109 6/20/2026
7.1.7 66,877 6/20/2026
7.1.7-beta.3 143 6/17/2026
7.1.7-beta.2 114 6/17/2026
7.1.7-beta.1 125 6/15/2026
7.1.6 154,695 6/2/2026
7.1.6-beta.1 100 6/2/2026
7.1.5-beta.2 1,470 5/16/2026
7.1.5-beta 737 4/1/2026
Loading failed

$# Changes in 7.2.4
- Fixed: `MicroElements.AspNetCore.OpenApi.FluentValidation` could lose string `minLength` and `maxLength` constraints when a custom JSON converter left the property's schema type unset (Issue #238, regression in 7.2.3). Length rules now fall back to the FluentValidation target's CLR string type only when the schema type is absent, preserving explicit schema types and the non-string `ChildRules` safeguards. A later transformer can restore the schema type without requiring registration order changes.
- Added regression coverage for string converters, late type restoration, identity child rules, explicit non-string schema types, and untyped non-string values.

# Changes in 7.2.3
- Fixed: constraints inside `ChildRules(child => child.RuleFor(x => x).Matches(...).DependentRules(...))` were missing from the parent property's OpenAPI schema. Identity child rules now contribute their constraints to the owning property (or collection item), including nested identity validators, while honoring rule/component filters and conditional-rule settings. The fix is shared by Swashbuckle, NSwag, and Microsoft.AspNetCore.OpenApi. Runtime validation is unchanged; schema generation does not execute `Must` predicates or repository lookups, and does not infer constraints from `DependentRules`.
- Fixed: identity child `NotNull`/`NotEmpty` rules preserve the owning property's nullability and optionality, matching FluentValidation's null-skipping child adapters. Non-empty string/array constraints and explicit parent presence rules are preserved.

# Changes in 7.2.2
- Fixed: `MicroElements.AspNetCore.OpenApi.FluentValidation` did not apply FluentValidation rules to a `[FromForm]` DTO bound by an **MVC controller** action (Issue #232, follow-up to the Swashbuckle-only #170 fix)
 - Root cause: MVC `ApiExplorer` flattens a controller's `[FromForm]` complex parameter into one form field per property, so `Microsoft.AspNetCore.OpenApi` builds the request body as an **inline** schema from those descriptions and never asks for the DTO's `JsonTypeInfo` — `FluentValidationSchemaTransformer` therefore never saw the type. Minimal API form bodies are not flattened and were never affected
 - Fix: `FluentValidationOperationTransformer` now applies the DTO's rules to the inline form schema for both `multipart/form-data` and `application/x-www-form-urlencoded`. The flattening is detected via `ModelMetadata.ContainerType` on the form-bound parameter descriptions, so a minimal API body — which the schema transformer already owns — is never touched twice
 - Property keys are taken verbatim from the schema, because a flattened form field is named after the model binder (`Name`, not `name`); the validator-side match stays name-insensitive
 - An action binding more than one form parameter composes its body as an `allOf` of one property bag per parameter; every bag is now constrained, and each bag is paired with the parameter that owns its fields — including the parameters the action binds directly (a loose scalar, array or `IFormFile`), which get a bag of their own but no rules. Without that pairing a DTO could be pulled into a foreign bag by a single coinciding field name and lose the constraints on its own bag
 - `encoding.contentType` (Issue #216) is now also emitted when the file part sits inside such an `allOf` bag
 - Dotted keys (`Inner.City`, ApiExplorer's binding path for a nested complex property) are skipped: the name matcher ignores separators, so such a key would otherwise inherit the rules of an unrelated root property named `InnerCity`. Nested form fields remain unsupported, matching the Swashbuckle form path
 - Issue #216 `encoding.contentType` is unchanged for the shapes it already covered, and now also consults every validator in multi-validator mode (`IsOneValidatorForType = false`) instead of only the first
 - Known limitations on this path (unchanged by this fix): a renamed form field (`[FromForm(Name = "...")]`, or a property renamed by the `INameResolver`) gets no constraints, and on net10 a form part rendered as a `$ref` (`IFormFile`, enums) cannot receive property-level constraints
 - Thanks to @bux for the report

# Changes in 7.2.1
- Fixed: the document-filter pipeline (`UseDocumentFilter = true`) did not apply FluentValidation constraints to aliased operation parameters such as `[FromHeader(Name = "X-Correlation-Id")]` (Issue #230). The constraint copy now uses the resolved schema property key (kebab-case/camelCase/PascalCase aliases) and falls back to the `INameResolver` for renames beyond separators (e.g. `[JsonPropertyName]`) — full parity with the operation filter
- Fixed: a dot in a header name (`[FromHeader(Name = "X.Trace.Id")]` — legal in HTTP) was treated as a nested `[FromQuery]` dot-path (#209/#211) and silently dropped the header's validation rules. Header-bound parameters are now exempt from the dot-path logic in all three parameter pipelines: `FluentValidationOperationFilter`, `FluentValidationDocumentFilter` and the ASP.NET Core `FluentValidationOperationTransformer`. NSwag is unaffected (it has no dot-path parameter logic)
- Fixed: the document filter matched document parameters to `ApiExplorer` descriptions case-sensitively, so options like `DescribeAllParametersInCamelCase` made it skip required-marking and constraint copying. The lookup is now case-insensitive, matching the operation filter
- Thanks to @jgarciadelanoceda for the report and the repro

# Changes in 7.2.0
- Added: the document-filter pipeline is promoted from experimental to a **supported opt-in** (`RegistrationOptions.UseDocumentFilter`, default `false`). The document filter processes the whole document at once and performs the unused-query-schema cleanup once at the end, so per-operation shared-DTO state issues (#223/#226) cannot occur in this pipeline — **on all target frameworks**, including net8.0/net9.0 where the 7.1.11 healing API is unavailable
 - Full functional parity with the default schema + operation filter pipeline: required-marking with the whole-dot-path check (#209), request bodies and `encoding.contentType` for `[FromForm]` (#216), multi-validator support, `allOf`/`oneOf`/`anyOf` traversal, `$ref` preservation for unmodified properties (#198, net10.0), and every operation of a multi-verb path is now processed (previously only the first)
 - The #209 and #216 logic is extracted into internal components shared by both pipelines, so they cannot drift apart
 - Robustness: the filter no longer fails the whole document generation on a throwing validator (top-level try/catch), falls back to `ServiceProviderValidatorRegistry` like the sibling filters, honors an injected `IFluentValidationRuleProvider` (new optional constructor parameter, appended last — source-compatible), and had its dead code, logging and nullability issues cleaned up. Behavior note: constructing `FluentValidationDocumentFilter` with neither `validatorRegistry` nor `serviceProvider` now throws `ArgumentNullException` (matching the sibling filters) instead of silently producing a filter that applies no rules; the DI registration path is unaffected
 - On net10.0 the cleanup also heals Swashbuckle's reserved-ids for processed container types (`SchemaRepository.ReplaceSchemaId`), so custom document filters running afterwards can regenerate them
 - `ExperimentalUseDocumentFilter` still works as an `[Obsolete]` alias forwarding to `UseDocumentFilter`
 - The default pipeline is unchanged; a future major version may switch the default
 - `samples/MinimalApi` now runs on the document-filter pipeline; README documents the option and its caveats


Full release notes can be found at: https://github.com/micro-elements/MicroElements.Swashbuckle.FluentValidation/blob/master/CHANGELOG.md