2016-10-20 2 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 и sheetis. Логика - это пропуск, который должен применяться сначала, а затем возвращать размерность результата. Например: вы возвращаете 100 заказов в API/Orders, я использую $ skip = 5, тогда клиент должен получить 95 заказов, пропустить первые 5 заказов, тогда, если вы установите размер страницы 10, клиент должен получить 5 - 15, 10 заказов. Таким образом, в вашем сценарии вы уже выполнили пейджинговую работу в логике контроллера, OData применяют пропуски после вашего пейджинга, поэтому результат неправильный, это похоже на то, что у нас есть только 10 продуктов и запрос пропустить 10, поэтому результат пуст.

Смежные вопросы