JsonApiDotNetCore Versions Save

A framework for building JSON:API compliant REST APIs using ASP.NET and Entity Framework Core.

v5.5.1

3 months ago

This patch eliminates building an intermediate ServiceProvider at startup, which unblocks usage in Aspire (more specifically, its usage of AddNpgsqlDataSource) and improves Serilog compatibility.

Furthermore, this patch makes methods on FilterParser overridable, which enables plugging in custom parsing of constant values (text surrounded by single quotes) inside a filter query string value.

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.5.0...v5.5.1

v5.5.0

5 months ago

New features and enhancements

  • This release adds support for .NET 8 and Entity Framework Core 8.
  • A new example was added that uses Dapper instead of Entity Framework Core. It demonstrates how to produce SQL for nearly all JSON:API features, such as side-loading related resources and compound nested filters, as well as applying resource changes and atomic operations. The produced SQL works on PostgreSQL, MySQL, and SQL Server.
  • We now use TryAdd[Singleton/Scoped/Transient] internally, which makes it easier to replace built-in dependencies with your own.

Bugfixes

  • Fix crash on atomic operations request when trace logging is turned on.

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.4.0...v5.5.0

v5.4.0

7 months ago

New features and enhancements

  • The usage of client-generated IDs can now be overruled per resource type. The new choices are: Forbidden/Allowed/Required (both per type and globally). See the documentation for details.
  • New example for using generic scopes-based authorization (see here).
  • Continuous integration builds use GitHub Actions on Windows, Ubuntu and macOS. This includes dependabot updates and CodeQL vulnerability scanning. It comes with a new NuGet feed for trying out the latest builds.
  • You can now sponsor our project with one-time and monthly donations.

Breaking changes

The boolean AllowClientGeneratedIds in options has been obsoleted in favor of the new IJsonApiOptions.ClientIdGeneration (see above)

Bugfixes

  • Correct examples in the documentation for AddJsonApi calls.
  • Correct nullability in the return value of the QueryExpressionRewriter.VisitResourceFieldChain method.
  • Change inheritdoc usage to correct IntelliSense/documentation on classes.
  • Sanitize user input to prevent a malicious user from forging log entries.

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.3.0...v5.4.0

v5.3.0

9 months ago

New features and enhancements

This release opens up query string parsing plus LINQ expression building for extensibility. This means that you can now define and plug in your own functions, available for use in query strings. Also, errors for invalid query string values now include the failure position, along with the ^ marker. See https://github.com/json-api-dotnet/JsonApiDotNetCore/pull/1286 for details and examples.

Breaking changes

Related to the above, the query string parsers, LINQ builders, and RuntimeTypeConverter have been moved out of .Internal namespaces.

Bugfixes

  • Do not execute unneeded SQL query in 1-to-1 relationship update, which fails on EF Core 8 preview.
  • Query strings: do not allow comparison of count() with null; do not treat null as a possible field name.

Merged PRs

New Contributors

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.2.0...v5.3.0

v5.2.0

1 year ago

Enhancements

  • Improve resource change tracking performance.
  • Improve performance of response serialization for large number of included resources.
  • Auto-feed includes from query string to the serializer when custom resource service is used.
  • Refreshed examples: connection strings, API namespaces, seed with sample data, use long IDs, detailed logging.
    • NoEntityFrameworkExample now uses a hardcoded in-memory dataset, demonstrating how to implement a custom read-only resource service and resource repository, which compiles the produced LINQ query and executes it against the dataset.
  • Harden Attr/Relationship attributes against invalid input.
  • Updated Ember sample to use latest versions and include tests. Special thanks to @briarsweetbriar and @rtablada!

Bugfixes

  • On secondary endpoint, the incoming filter from query string was not applied when determining total resource count via inverse relationship.
  • A duplicate trailing slash was rendered in Location header when request path ended with a slash.
  • Minor corrections in documentation.
  • Do not emit unused namespace import in controller source generator.
  • Use deterministic culture when converting to string.
  • Fixes for using include and fields with EF Core owned entities.

Breaking changes

  • Minor changes in the QueryExpression model shape, to make it easier to understand and consume.
  • Removed resource ID from error message, as the error is unrelated to any specific record.
  • Disable EF Core Change Tracking on read-only requests (can be reverted by overriding a virtual method on the resource repository).

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.1.2...v5.2.0

v5.1.2

1 year ago

Enhancements

Bugfixes

  • Fixed whitespace handling in query string parameters.
  • Fixed ModelState validation in atomic operations when using custom validators with injected dependencies.
  • Fixed incorrect ModelState validation error when using [Range] that does not include the type's default value.

Breaking changes

  • Parsing query string parameters used to rely on the current culture, which is no longer the case. To revert to the old behavior, add the following at startup:
    AppContext.SetSwitch("JsonApiDotNetCore.ParseQueryStringsUsingCurrentCulture", true);
    

Merged PRs

New Contributors

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.1.1...v5.1.2

v5.1.1

1 year ago

This patch relaxes the requirements for the any() filter function: Instead of requiring at least two constants, now a single constant works as well.

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.1.0...v5.1.1

v5.1.0

1 year ago

New features and enhancements

The final version of JSON:API v1.1 was released recently, eight years after its initial draft. We've always tried to keep up-to-date with specification changes, and this release follows that tradition. We've slightly adapted JsonApiDotNetCore in corner cases (https://github.com/json-api-dotnet/JsonApiDotNetCore/issues/1195 and https://github.com/json-api-dotnet/JsonApiDotNetCore/issues/1196) where the specification used to be ambiguous.

New in this release: capabilities for relationships. Similar to [Attr(Capabilities = ...)], you can now declare what's permitted in requests where relationships are involved: [HasOne(HasOneCapabilities = ...)] and set the default in options. Despite this was already possible by writing custom code in resource definitions (which can still be useful when depending on externally changing conditions), relationship capabilities are just a shorthand for simpler cases. See its documentation and feature design for details.

Based on our own research and experiments, we've updated the guidance on mapping Entity Framework Core one-to-one relationships at https://www.jsonapi.net/usage/resources/relationships.html#one-to-one-relationships-in-entity-framework-core to make JsonApiDotNetCore work properly. In summary, there are two pitfalls to watch out for, where you need to override the default mappings: identifying foreign keys and using DeleteBehavior.SetNull instead of the misleading default DeleteBehavior.ClientSetNull.

You can now share your models (that is, your Entity Framework Core entity classes that are decorated with JsonApiDotNetCore attributes) with .NET Framework code. To accomplish this, move them into a separate, shared project that references only the JsonApiDotNetCore.Annotations package. Aside from targeting .NET Standard 1.0 instead of .NET 6, we've fixed https://github.com/json-api-dotnet/JsonApiDotNetCore/issues/1198 and https://github.com/json-api-dotnet/JsonApiDotNetCore/issues/1199.

Breaking changes

Related to the above, we've obsoleted CanInclude on relationships. The equivalent functionality is now covered by relationship capabilities.

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.0.3...v5.1.0

v5.0.3

1 year ago

This patch removes a limitation that blocked future use of EF Core 7, as well as minor tweaks and optimizations.

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.0.2...v5.0.3

v5.0.2

1 year ago

This patch fixes an error when sorting by a base/interface property from a lambda expression in a resource definition.

Merged PRs

Full Changelog: https://github.com/json-api-dotnet/JsonApiDotNetCore/compare/v5.0.1...v5.0.2