Cześć,
Posiadam AspNetcore.Odata v8.0.10, projekt w .net6. W startup.cs dodałem

.AddOData(options =>
{
    options.Filter().Select().OrderBy().Count().SetMaxTop(500).SkipToken();
});

Mam controler:

[Route("api/[controller]")]
    [ApiController]
    public class ModuleController : ControllerBase

I endpoint:

[EnableQuery(PageSize = 5)]
[HttpGet("[action]")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public async Task<ActionResult<IQueryable<Module>>> GetModule()
{
    //return Ok(_moduleRepository.GetModuleData());
    var tResult = _moduleRepository.GetModuleData();
    return Ok(new PageResult<Module>(tResult, Request.ODataFeature().NextLink, Request.ODataFeature().TotalCount));
}

Jakieś podstawowe funkcje odata tj filter, order itp testowałem dla tej zakomentowanej linii return Ok(_moduleRepository.GetModuleData()); - metoda zwraca DbSet AsQueryalbe() i wyglądało że coś działa, teraz chciałbym ogarnąć paginację serwerową i tu pojawiły się komplikacjie, nie mam pojęcia jak ją uruchomić... dodałem PageSize = 5 i w tym momencie co bym nie podał to maksymalnie metoda zawsze zwraca mi 5 el, $count=true nie zwraca ilości tylko 5el w json. Opcja w PageResult też w json tylko obiekty, nie ma nextlink nie ma total count...
$Skiptopen dostaje informacje że nie prawidłowa komenda :(
Ktoś może tego używał? w jaki sposób uruchomić paginację po stronie serwera?

Próbowałem dodawać przy inicjalizacji w startup.cs

.AddRouteComponents("odata", GetEdmModel());

gdzie:

private static IEdmModel GetEdmModel()
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder
    {
        Namespace = "Api",
        ContainerName = "DefaultContainer"
    };
    builder.EntitySet<Module>("Modules").EntityType.HasKey(item => item.Id);
    IEdmModel edmModel = builder.GetEdmModel();
    return edmModel;
}

Nie wiem czy to kwestia że mam [Route("api/[controller]")], ale w takiej konfiguracji endpoint w ogóle nie działa.

Gdy próbuję coś takiego w postmanie:
https://localhost:44355/api/Module/GetModule?$SkipToken=1
dostaję: The query specified in the URI is not valid. Unable to parse the skiptoken value '1'. Skiptoken value should always be server generated.
Jak dam samo skiptoken, to dostaje 500 internal server error.

adres/odata zwraca:

 {
  "@odata.context": "https://localhost:44355/odata/$metadata",
  "value": [
    {
      "name": "Module",
      "kind": "EntitySet",
      "url": "Module"
    }
  ]
}

Tylko nie wiem dlaczego https://localhost:44355/api/Module/GetModule?$count=true&$top=3 nie działa
https://localhost:44355/odata/Module/GetModule?$count=true&$top=3 też nie, a jeśli już to nie zwraca tego w formie jak wyżej tylko zwykły result 5 el bez next link...