2016-09-21 64 views
9

我正在使用OData Web API for Version 4,當我嘗試使用$top參數查詢OData web Api時,它會在異常消息後返回我。OData異常已超出Top查詢的'0'的限制

在URI中指定的查詢無效。已超出Top查詢的「0」限制。從傳入請求中的值是「10」

我使用Apache點燃的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; 
} 
+0

發現還請包括完整您在問題中使用的URL。 – Igor

+0

http:// localhost:9000/odata/Productioncurvepnl?$ top = 10 – Abdul

回答

21

由於Web API OData V6.0.0您需要啓用查詢選項才能完成此項工作。 這可以在WebApiConfig.Register(HttpConfiguration config)

config.Select().Expand().Filter().OrderBy().MaxTop(null).Count(); 
您的模型

,或者直接在全球範圍進行,細粒度配置:

[Page(MaxTop = 100)] 
public class Products 

更多細節可以在documentation

+0

它的工作就像魅力。謝謝 –

+1

謝謝,希望我可以用大錘... upvote ... –

+1

爲'config.Select()'工作添加'使用System.Web.OData.Extensions;'希望可以幫助某人。 – stom

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

0

對我來說[EnableQuery(Max Top = 100)]不起作用,但[Queryable]正常工作。 [EnableQuery(Max Top = 100)]應該可以工作,但不知道爲什麼它不起作用。有人知道,請讓我知道。但現在我正在使用[Queryable]。

+1

Queryable已被棄用,我已經發布了兩種方法的答案。要麼全球配置,要麼按照型號 – ogrim