web-dev-qa-db-fra.com

OData Exception La limite de '0' pour la requête Top a été dépassée

J'utilise OData Web API pour la version 4, lorsque je tente d'interroger OData Web Api à l'aide du paramètre $top, il me renvoie le message d'exception suivant.

La requête spécifiée dans l'URI n'est pas valide. La limite de «0» pour la requête Top a été dépassée. La valeur de la demande entrante est '10'

J'utilise Apache Ignite dotNet LINQ comme source de données au lieu d'Entity Framework, ma méthode d'action de contrôleur OData est la suivante:

[EnableQuery]
public IQueryable<Productioncurvepnl> GetProductioncurvepnl()
{
    Console.WriteLine("Starting query to ignite");
    var q = AIgniteClient.IgniteClient.Instance.ProductionCurvePnLCache.AsCacheQueryable().Select(c => c.Value);
    return q;
}
15
Abdul

Depuis Web API OData V6.0.0, vous devez activer les options de requête pour que cela fonctionne. Ceci peut être fait globalement dans la WebApiConfig.Register(HttpConfiguration config)

config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();

ou directement sur vos modèles, pour une configuration à grain fin:

[Page(MaxTop = 100)]
public class Products

Si vous utilisez les API Model Bound Fluent et ne pouvez pas ajouter d'attributs, vous devez ajouter les options de la requête. Par exemple, .Page(50, 50)

 builder.EntitySet<AccountRecordDto>("Accounts").EntityType.Expand(1, 
 "Transactions").Count().Page(50, 50);

Plus de détails peuvent être trouvés dans la documentation

39
ogrim

Pour moi [EnableQuery (Max Top = 100)] ne fonctionne pas, mais [Queryable] fonctionne correctement. [EnableQuery (Max Top = 100)] devrait fonctionner mais ne sait pas pourquoi cela ne fonctionne pas. Quelqu'un sait alors s'il vous plaît faites le moi savoir. Mais pour l'instant j'utilise [Queryable].

1
Uddhao Pachrne

Ajouter ci-dessous dans Startup.cs fonctionne pour moi

config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
1
jt03

Selon le message d'erreur renvoyé, le problème le plus probable est que la variable MaxTop n'est pas définie. Vous pouvez le faire en utilisant la variable EnableQueryAttribute sur votre méthode comme suit (changez la valeur comme bon vous semble), j'ai utilisé une valeur de 100.

[EnableQuery(MaxTop = 100)]
public IQueryable<Productioncurvepnl> GetProductioncurvepnl()
{
    Console.WriteLine("Starting query to ignite");
    var q = AIgniteClient.IgniteClient.Instance.ProductionCurvePnLCache.AsCacheQueryable().Select(c => c.Value);
    return q;
}

Voir EnableQueryAttribute pour plus de détails.

1
Igor