我正在使用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;
}
答案 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();