当利用托管在不同服务器上的Web Api端点时,分页的最佳方法是什么,以避免过多的序列化和反序列化,同时仍然能够看到在Get请求中找到的匹配总数?
Web Api:
[Queryable]
public IQueryable<Customer> Get(string input) {
return _repo.GetCustomers(input).AsQueryable();
}
控制器代码:
HttpResponseMessage response = client.GetAsync("api/customer?input=test&$top=2&$skip=0").Result; // test string
if (response.IsSuccessStatusCode) {
CustomerSearchResultViewModel resultViewModel = new CustomerSearchResultViewModel();
resultViewModel.Customers = response.Content.ReadAsAsync<IEnumerable<Customer>>().Result.ToList();
resultViewModel.TotalResults = resultViewModel.Customers.Count;
}
在此示例中,TotalResults的上限为2,而不是返回分页前找到的匹配总数。
有没有办法通过利用OData获得总结果?如果那是不可能的,我怎样才能最好地保留OData功能,同时获得我需要的数字?
答案 0 :(得分:1)
您可以使用OData $inlinecount选项。请求看起来像,
api/customer?input=test&$top=2&$skip=0&$inlinecount=allpages
。
现在,我们不支持使用开箱即用的默认json和xml格式化程序发送count值。您的客户端代码是我们决定不默认发送它的最佳示例。原因是客户端不知道如何处理额外的count属性。默认情况下,我们的OData格式化程序支持$ inlinecount选项,因为OData格式对计数值适合响应的位置有明确的规则。
也就是说,您可以进行简单的更改以支持您的回复中的计数。您的客户端代码也必须改变。有关详细信息,请参阅此answer。