Pedz.AspNetCore.Fop.MinimalApi
0.1.0
dotnet add package Pedz.AspNetCore.Fop.MinimalApi --version 0.1.0
NuGet\Install-Package Pedz.AspNetCore.Fop.MinimalApi -Version 0.1.0
<PackageReference Include="Pedz.AspNetCore.Fop.MinimalApi" Version="0.1.0" />
<PackageVersion Include="Pedz.AspNetCore.Fop.MinimalApi" Version="0.1.0" />
<PackageReference Include="Pedz.AspNetCore.Fop.MinimalApi" />
paket add Pedz.AspNetCore.Fop.MinimalApi --version 0.1.0
#r "nuget: Pedz.AspNetCore.Fop.MinimalApi, 0.1.0"
#:package Pedz.AspNetCore.Fop.MinimalApi@0.1.0
#addin nuget:?package=Pedz.AspNetCore.Fop.MinimalApi&version=0.1.0
#tool nuget:?package=Pedz.AspNetCore.Fop.MinimalApi&version=0.1.0
Pedz.AspNetCore.Fop
This package is highly experimental and should not be used in production environments. It is provided as-is without any warranties or support.
Breaking changes may occur in future releases.
Features
- Paginate based on offset and limit
- Sort by a property in ascending or descending order
- Filter by property values using different operators
Installation
dotnet add package Pedz.AspNetCore.Fop.MinimalApi
How To Use
Add a [OffsetFop] attribute on the entity class you want to enable FOP (Filter, Order, Pagination) for.
Then add [FopProperty] attributes on the properties you want to be filterable and/or sortable.
Example :
[OffsetFop(MaxSize = 500, OffsetParameterPrefixName = "offset", PropertiesParameterPrefixName = "properties", SortParameterPrefixName = "sort-by")]
public class FooEntity
{
[Key]
public Guid Id { get; set; }
[Required]
[FopProperty(IsFilterable = true, IsSortable = true)]
public required string FooProperty { get; set; }
[Required]
[FopProperty(IsFilterable = false, IsSortable = true)]
public required string MyProperty { get; set; }
[Required]
[FopProperty(IsFilterable = true, IsSortable = true, PropertyName = nameof(FooDto.Test))] // If you need to match dto property name
public required int TestProperty { get; set; }
[Required]
[FopProperty(IsFilterable = true, IsSortable = true)]
public required DateTimeOffset DateTimeOffsetProperty { get; set; }
[Required]
[FopProperty(IsFilterable = true, IsSortable = true)]
public required DateOnly DateOnlyProperty { get; set; }
[Required]
[FopProperty(IsFilterable = true, IsSortable = true)]
public required TimeOnly TimeOnlyProperty { get; set; }
}
This will generate a OffsetPagingData class in the same namespace as the targeted entity you can just place in the minimal api lambda and the binding will happen.
Example :
app.MapGet("/test", async (
HttpContext context,
[FromServices] FooDbContext dbContext,
FooEntityOffsetPagingData data) =>
{
var foos = await dbContext.Foos
.ApplyFop(data, query => query.OrderBy(x => x.Id))
.ToListAsync();
return Results.Ok(foos);
});
Example of possible calls :
?offset[500]=1000
?sort-by=asc:fooProperty
?properties.fooProperty=eq:barValue
Supporting sort operators
The operators are not case sensitive.
- asc (ascending) (default)
- desc (descending)
Supported filter operators
The operators are not case sensitive.
- eq (equal) (default)
- neq (not equal)
- gt (greater than)
- gteq (greater than or equal)
- lt (less than)
- lteq (less than or equal)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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 was computed. 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 was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.HashCode (>= 6.0.0)
- Microsoft.CodeAnalysis.CSharp (>= 4.14.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 306 | 11/14/2025 |
| 0.0.9 | 333 | 11/13/2025 |
| 0.0.8 | 328 | 11/12/2025 |
| 0.0.5 | 326 | 11/11/2025 |
| 0.0.1-experimental | 323 | 11/11/2025 |