OData 异常已超出 Top 查询的“0”限制

OData Exception The limit of '0' for Top query has been exceeded

我正在使用版本 4 的 OData Web API,当我尝试使用 $top 参数查询 OData Web Api 时,它 return 我遵循异常消息。

The query specified in the URI is not valid. The limit of '0' for Top query has been exceeded. The value from the incoming request is '10'

我使用 Apache Ignite dotNet LINQ 作为数据源而不是 Entity Framework,我的 OData 控制器操作方法如下:

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

根据返回的错误消息,问题很可能是 MaxTop 未定义。您可以像这样在您的方法上使用 EnableQueryAttribute 来做到这一点( 更改您认为合适的值 ),我使用的值为 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;
}

有关详细信息,请参阅 EnableQueryAttribute

对我来说 [EnableQuery (Max Top = 100)] 不工作,但 [Queryable] 工作正常。 [EnableQuery (Max Top = 100)] 应该工作,但不知道为什么它不工作。有人知道请告诉我。但是现在我正在使用 [Queryable].

Web API OData V6.0.0 起,您需要启用查询选项才能使此工作正常进行。 这可以在 WebApiConfig.Register(HttpConfiguration config)

中全局完成
config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();

或直接在您的模型上进行细粒度配置:

[Page(MaxTop = 100)]
public class Products

如果您使用的是 Model Bound Fluent APIs 并且无法添加属性,则需要附加查询选项。例如 .Page(50, 50):

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

可以在 documentation

中找到更多详细信息

在 Startup.cs 下面添加对我有用

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