用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等 (2)

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

首先我们需要从参数(query string参数)传进来pageIndex和pageSize,还要赋默认值,以防止API的消费者没有设置pageIndex和pageSize;由于pageSize的值是由API的消费者来定的,所以应该在后端设定一个最大值,以免API的消费者设定一个很大的值。

由于所有的资源几乎都要使用翻页,所以我们最好使用一个公共类来封装这些翻页相关的信息:

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

(我暂时把这个类放在了Core项目里)。

这个公共类很简单,可以为pageIndex和pageSize设定默认值,也设置了一个每页的最多条目数是100;这里面还有一个OrderBy属性,默认值是“Id”,因为翻页必须要先排序,但目前这个OrderBy属性还没用上。

而针对具体的资源,我们可以再建立一个类继承于PaginationBase,这个类就是Country的参数类:

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

由于暂时还没有什么特别的参数,所以里面是空的。

下面我修改一下CountryRepository:

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

可以看到我组建了这个查询的表达式,并且直接出发了迭代动作,返回查询结果。

回到Action方法里:

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

我使用了这个参数类代替了之前的pageIndex和pageSize参数,因为ASP.NET Core足够智能,可以把这两个参数解析到这个类里面。

下面测试一下:

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

我就不进行多次测试了,这个是好用的。

如果你是用的是关系型数据库的话,应该可以在Log的输出媒介上看到打印出的SQL语句(但我这里使用的是内存数据库,所以看不到),如果使用关系型数据库还是看不到SQL语句的话,请配置一下:

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

返回翻页的元数据

很显然只返回当前页的数据是不满足需求的,至少还需要返回总页数,总数等信息,还有可能需要返回前一页或者后一页的链接。但是如何把这些信息连同当页的数据一起返回给API消费者呢?

下面的做法是可以把这些数据都返回去的:

{ “data”: [{country1}, {country2}...], “metadata”: {"prev": "/api/...", ....} }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfjpp.html