WebAPI和OData函数

时间:2018-10-19 13:03:51

标签: asp.net-web-api odata

我正在使用Webapi来获取数据。 API将结果限制为100。在这种情况下,结果为2481,但是由于这个限制,如果不使用OData函数,我将无法获得所有需要的记录。有人告诉我要使用跳过功能,但是有关此文档的资料对于以前从未使用过的人不是很有帮助。

我的电话如下:

cmake_minimum_required(VERSION 3.5)
project(ncurses)
set(CMAKE_CXX_STANDARD 11)

set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Wextra")

find_package(Curses REQUIRED)

add_executable(ncurses main.cpp)
target_link_libraries(ncurses ${CURSES_LIBRARIES})

下面是返回的第一个结果的摘要:

    https://accounting.sageone.co.za/api/2.0.0/TaxInvoice/get?apikey={xxxxxxxxxx}&companyid=12345&includeDetail=true&$orderby=Created%20desc

我需要执行以下操作:返回所有记录,其中特定字段(“创建的”)包含当前年份,即使结果超过100。我假设需要使用$ search和skip函数,但是我不确定语法。

谢谢, 史蒂文

2 个答案:

答案 0 :(得分:0)

根据文档here,您应该将skip参数附加到URL中。

类似的东西:

https://accounting.sageone.co.za/api/2.0.0/TaxInvoice/get?apikey={xxxxxxxxxx}&companyid=12345&includeDetail=true&$skip=100&$orderby=Created%20desc

提供的示例是:

https://services.odata.org/OData/OData.svc/Products?$skip=2&$top=2&$orderby=Rating

您可能需要摆弄一些东西,但这似乎是方法。

答案 1 :(得分:0)

要返回所有记录,其中特定字段(“已创建”)包含当前年份,则需要在URL后面附加以下过滤条件。您可以看到其他受支持的OData Date函数here

&$filter=year(Created) eq 2018

OData处理可能返回大量数据的服务的分页。由于API限制为100(表示数据的页面大小),因此每个服务调用最多可获得100条记录。要使记录从101条增加到200条,您需要通过在网址后附加$skip=100来跳过前100条记录。另外,如果您需要从201到300提取记录,则将$ skip = 200附加到URL上,依此类推,直到获得2481条记录。这意味着您需要通过增加$skip的值来调用服务25次。

因此,通过附加的过滤器和跳过查询,您需要将以下查询字符串附加到现有的网址上

 &$filter=year(Created) eq 2018&$skip=100

此外,如果您希望每次服务调用获取的记录少于100条,则需要使用$top查询。假设您的应用程序中页面大小为50,则将$top=50附加到查询字符串中。

相关问题