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

问题描述 投票:0回答:5

我正在使用版本 4 的 OData Web API,当我尝试使用

$top
参数查询 OData Web Api 时,它会返回以下异常消息。

URI 中指定的查询无效。已超出热门查询的“0”限制。传入请求的值为“10”

我使用 Apache Ignite dotNet LINQ 作为数据源而不是实体框架,我的 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;
}
c# odata ignite asp.net-web-api-odata
5个回答
70
投票

Web API OData V6.0.0
开始,您需要启用查询选项才能完成此工作。 这可以在全球范围内完成
WebApiConfig.Register(HttpConfiguration config)

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

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

[Page(MaxTop = 100)]
public class Products

如果您使用模型绑定流畅 API 并且无法添加属性,则需要附加查询选项。例如

.Page(50, 50)

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

更多详细信息可以在文档

中找到

5
投票

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

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

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了解更多详细信息。


1
投票

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


0
投票

我遇到了同样的问题,我通过在 .Net 6 Odata 中间件中设置“SetMaxTop”属性解决了它:

builder
   .Services
   .AddControllers(mvcoptions => mvcoptions.EnableEndpointRouting = false)
   .AddOData(options => options.Select().Filter().Count().OrderBy().Expand().SetMaxTop(1000));
© www.soinside.com 2019 - 2024. All rights reserved.