在dynamics crm web api还没出现前,咱们是经过fetchxml来实现的,固然这种方式依旧可行,那既然web api来了咱们就拥抱新的方式。web
web api中咱们经过指定查询的条数来实现分页的效果,很简单设置http的head即prefer,odata.maxpagesize就能够了。json
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(weburi); req.Credentials = new NetworkCredential(username, pwd, domain); req.Method = "Get"; req.Accept = "application/json"; req.ContentType = "application/json; charset=utf-8"; req.Headers.Set("OData-MaxVersion", "4.0"); req.Headers.Set("OData-Version", "4.0"); req.Headers.Set("Prefer", "odata.include-annotations= OData.Community.Display.V1.FormattedValue,odata.maxpagesize="+count); using (HttpWebResponse res = (HttpWebResponse)req.GetResponse()) { StreamReader read = new StreamReader(res.GetResponseStream()); result = read.ReadToEnd(); }
第一次的web请求时weburl是标准格式例如"http://xx/api/data/v8.0/accounts?$select=name,telephone1&$orderby=name asc",再取下一页的数据时(也就是第二次之后的web请求),weburi就是下图中这个@odata.nextLink的值了,仔细看下图中返回json中的叫作@odata.nextLink的属性名,这个值自己已进行过urlencode因此不须要再次urlencode,取值到最后一次返回的json没有@odata.nextLink这个属性时表示已经是最后一页。api
上面咱们只提到了下一页,那我要返回上一页怎么办,这就须要你本身想办法了,要么缓存住返回的结果要么缓存住@odata.nextLink的值,以备返回上一页显示准确的数据。缓存