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

时间:2016-09-21 17:08:30

标签: c# odata ignite asp.net-web-api-odata

我正在使用OData Web API for Version 4,当我尝试使用$top参数查询OData web Api时,它会在异常消息后返回给我。

  

URI中指定的查询无效。已超出Top查询的限制“0”。传入请求的值为“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;
}

4 个答案:

答案 0 :(得分:42)

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

中找到

答案 1 :(得分:1)

根据返回的错误消息,问题很可能是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

答案 2 :(得分:1)

对我来说[EnableQuery(Max Top = 100)]无效,但[可查询]工作正常。 [EnableQuery(Max Top = 100)]应该可以工作,但不知道为什么它不起作用。有人知道那么请告诉我。但是现在我正在使用[可查询]。

答案 3 :(得分:1)

在Startup.cs中添加以下内容对我有用

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