web-dev-qa-db-ja.com

OData例外トップクエリの「0」の制限を超えました

バージョン4のOData Web APIを使用していますが、$topパラメーターを使用してOData Web APIをクエリしようとすると、次の例外メッセージが返されます。

URIで指定されたクエリが無効です。上位クエリの「0」の制限を超えました。着信要求の値は「10」です

Entity Frameworkの代わりに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;
}
17

_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 API を使用していて、属性を追加できない場合は、クエリオプションを追加する必要があります。たとえば、.Page(50, 50)

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

詳細は documentation にあります

50
ogrim

Startup.csに以下を追加するとうまくいきます

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

私にとっては、[EnableQuery(Max Top = 100)]は機能していませんが、[Queryable]は正常に機能しています。 [EnableQuery(Max Top = 100)]は機能するはずですが、機能しない理由がわかりません。誰かが知っているなら、私に知らせてください。ただし、ここでは[Queryable]を使用しています。

1
Uddhao Pachrne

返されたエラーメッセージに基づいて、問題は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
Igor