如何在仍然分页的情况下使用OData / web api查看总匹配请求?

时间:2013-03-25 17:24:05

标签: asp.net asp.net-mvc asp.net-web-api odata

当利用托管在不同服务器上的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功能,同时获得我需要的数字?

1 个答案:

答案 0 :(得分:1)

您可以使用OData $inlinecount选项。请求看起来像, api/customer?input=test&$top=2&$skip=0&$inlinecount=allpages

现在,我们不支持使用开箱即用的默认json和xml格式化程序发送count值。您的客户端代码是我们决定不默认发送它的最佳示例。原因是客户端不知道如何处理额外的count属性。默认情况下,我们的OData格式化程序支持$ inlinecount选项,因为OData格式对计数值适合响应的位置有明确的规则。

也就是说,您可以进行简单的更改以支持您的回复中的计数。您的客户端代码也必须改变。有关详细信息,请参阅此answer