我正在使用版本 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;
}
从
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);
更多详细信息可以在文档
中找到在 Startup.cs 中添加以下内容对我有用
config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
根据返回的错误消息,最有可能的问题是
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]。
我遇到了同样的问题,我通过在 .Net 6 Odata 中间件中设置“SetMaxTop”属性解决了它:
builder
.Services
.AddControllers(mvcoptions => mvcoptions.EnableEndpointRouting = false)
.AddOData(options => options.Select().Filter().Count().OrderBy().Expand().SetMaxTop(1000));