Основным способом использования OData в .NET является клиентская библиотека служб данных WCF. В Visual Studio вы можете щелкнуть правой кнопкой мыши по проекту и выбрать «Добавить служебную ссылку», чтобы начать. Это «Добавить ссылку на службу» использует клиентскую библиотеку служб данных WCF под капотом. Для получения общей информации о том, как использовать клиентскую библиотеку, проверить документацию MSDN здесь: http://msdn.microsoft.com/en-us/library/cc668772.aspx
предостережение, хотя: JSON вы вывесили (с "__next"
) старый формат OData JSON, иногда называют «Verbose JSON ». Клиент WCF Data Services не поддерживает этот формат. Он поддерживает только Atom и новый формат JSON. Пока ваш сервер может поддерживать Atom или новый v3 JSON, это не должно быть проблемой для вас.
Что касается вашего фактического вопроса, вы можете использовать метод .GetContinuation()
на объекте QueryOperationResponse
. Например:
// "DemoService" is the auto-generated subclass of DataServiceContext created when you run "Add Service Reference"
DemoService context = new DemoService(new Uri(<url to the service root>));
var firstPage = context.Customers.Execute() as QueryOperationResponse<Customer>;
var token = firstPage.GetContinuation();
if (token != null)
var secondPage = context.Execute<Customer>(token);
Очевидно, что вы, вероятно, хотите, чтобы превратить это в петлю, но это должно дать вам основную идею использования API. Для получения дополнительной информации см. Эту страницу в MSDN: http://msdn.microsoft.com/en-us/library/ee358711.aspx
Спасибо, Джен, это очень помогает! Теперь ваш пример собирает все страницы результатов сразу, но для веб-приложения лучше не предоставлять ссылку для продолжения посетителю? Есть ли что-нибудь готовое для привязки адреса продолжения к пейджинговой ссылке в представлении? Проблема, конечно, в том, что ссылка продолжения не должна ссылаться непосредственно на поток OData, а на новую страницу просмотра. – Peter
Это отличный вопрос, но у меня нет большого ответа для вас (частично потому, что я просто не очень хорошо знаком с привязкой данных). Я не знаю каких-либо механизмов продолжения, кроме GetContinuation(), поэтому любая привязка к привязке данных должна быть настраиваемым кодом, который вы пишете поверх GetContinuation(). –
Думая об этом больше, я думаю, нет готового пейджингового решения, связанного с продолжением OData, тем более, что продолжение - только вперед. Пользователи ожидают прямой и обратный пейджинг. – Peter