- One namespace no longer spans two assemblies now that they live in the domain layer
- The Data Protection purpose keeps its old string, so outstanding 2FA codes stay valid
- Match the ASP.NET Core provider, which keeps the key id and key ring location out of the log
- Assert the provider the manager uses, not only the one the key's descriptor hands out
- The public ProviderType is the last type registered under a key, not the one the manager uses
- Add cross-host coverage for a second user type and for both hosts opting out
- Register them in AbpIdentityDomainModule so both ends of a distributed flow use the same provider
- Add AbpIdentityTokenProviderOptions.UseAbpTokenProviders to opt out on every host
A native integer is a number in the api type system too, and a between rule
that carries its own comparer is skipped when its bounds no longer read as an
interval, because the comparer itself is not on the descriptor.
The contribution context carries the property now, so a rule on another type,
the ordinal comparison of two strings for example, no longer publishes a
numeric bound. Two bounds are compared as decimals, which are exact for every
integral type, and only fall back to double for the magnitudes decimal can
not hold.
Range(Type, string, string) keeps its limits as strings until the first
validation. They are converted the way the attribute converts them, so the
reported limit is the one the server validates against whatever the culture
of the request is, and a magnitude outside the decimal range survives it.
Range(Type, string, string) keeps its limits as strings until the first
validation, so a numeric limit was reported in the culture that declared it
and could not be merged with a FluentValidation bound.
It reflects the statically evaluable FluentValidation rules of a DTO into the
api definition, so the client proxy generators see the same constraints the
attributes already provide. A rule is only published when it applies to every
instance of the type, which leaves out the conditional rules, the rules of a
non-default rule set and the rules of a RuleForEach.
Volo.Abp.FluentValidation keeps its own dependencies, it does not depend on
Volo.Abp.Http.
IPropertyApiDescriptionModelContributor lets a package enrich the properties of
a type after they are created from the attributes. The contributors are applied
by AspNetCoreApiDescriptionModelProvider, so TypeApiDescriptionModel stays a
plain model.
The RangeAttribute supports exclusive bounds since .NET 8, but they were lost
in the api definition. The bounds are also written with the invariant culture
now, so the api definition does not depend on the culture of the request.