OData pagination с помощью WebApi ($ inlinecount)

Я использую OData для разбивки длинного списка элементов, возвращаемых с помощью веб-ави. Я могу фильтровать данные через URL с индексом начала и конца.

У меня есть вопрос, как узнать общее количество элементов? Поэтому я могу отображать страницу 1 из 3 (20 элементов) на своем мобильном устройстве, которая вызывает веб-api.

Ответ 2

Вы можете использовать $inlinecount = allpages в запросе, чтобы получить количество всех объектов в результатах без верхнего и пропустить. Например:

http://services.odata.org/OData/OData.svc/Products $top = 1 & skip = 1 & $inlinecount = allpages

Возвращает один продукт, но также встроенный счетчик 9 (поскольку в наборе объектов есть 9 продуктов).

Ответ 3

Попробуйте этот подход: http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-package/

Он использует последний пакет Web API OData.

До тех пор, пока не будет завершен финализированный пакет Web API OData (иногда осенью этого года должно быть около ноября), когда $inlinecount поддерживается из коробки, это решение, скорее всего, будет лучшим.

Ответ 4

У меня был точный номер на прошлой неделе. Ознакомьтесь с расширением ваших ответов веб-API ASP.NET с полезными метаданными

Я использовал этот пост и пример кода, чтобы получить сетку поискового вызова и запустить с помощью OData. Как указано в образце, я создал обработчик делегирования для захвата HttpResponseMessage и обернул его в пользовательские метаданные, включающие подсчет элементов. Также создается пользовательский атрибут CustomQueryableAttribute, который наследует атрибут QueryableAttribute по умолчанию.

Это может показаться немного сложным, но на самом деле довольно просто реализовать. Я заработал около 30 минут.

Надеемся, что в будущих версиях веб-API более полная поддержка OData.

EDIT: поддержка Odata НЕ будет поставляться с веб-API. Атрибут queryable удаляется для выпуска RTM. Более полная поддержка OData будет доступна через некоторое время после первоначального обновления через отдельный пакет Nuget.