バージョン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;
}
_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 にあります
Startup.csに以下を追加するとうまくいきます
config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
私にとっては、[EnableQuery(Max Top = 100)]は機能していませんが、[Queryable]は正常に機能しています。 [EnableQuery(Max Top = 100)]は機能するはずですが、機能しない理由がわかりません。誰かが知っているなら、私に知らせてください。ただし、ここでは[Queryable]を使用しています。
返されたエラーメッセージに基づいて、問題は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 を参照してください。