2016-10-20 6 views
0

ページングがうまく動作することはありませんでした。私が見ていることは、Odata層がコントローラが返すデータをスキップしていることです(つまり、ページングとフィルタリングを制御したいということです)。 $ skip =なしでリクエストを行うと、APIは10個のレコードを返します。 $ skip = 100と設定すると、0レコードが返されます。助言がありますか?以下のコントローラメソッド:Odata webv apiサーバー側のページング

[EnableQuery(PageSize=10)]  
public IHttpActionResult GetProducts(ODataQueryOptions<Product> 
queryOptions) 
{  
List<Product> results = new List<Product>(); 
for (int i = 0; i < 10; i++) 
{ 
    results.Add(new Product() { Id = Guid.NewGuid(), Name= 
    "Product"+ i.ToString() }); 
} 
Request.ODataProperties().NextLink = 
    newUri(getNextUrl(queryOptions.Skip,10)); 
return Ok<IQueryable<Product>>(results.AsQueryable()); 
} 

答えて

0

サーバ側に$ skipとpagesizeセットがある場合。ロジックはスキップされ、最初に適用され、結果のページサイズが返されます。たとえば、/ Orders APIで100個の注文を返し、$ skip = 5を使用し、クライアントが95個の注文を取得し、最初の5個の注文をスキップしてからpagesizeを10に設定すると、クライアントは5〜 10オーダー。あなたのシナリオでは、すでにコントローラロジックでページング作業を行っています.ODataはページング後にスキップします。結果は間違っています.10個の製品しかなく、スキップ10を要求するようなので、結果は空です。

関連する問題