1

当利用托管在不同服务器上的 Web Api 端点时,进行分页以避免过度序列化和反序列化同时仍然能够查看在 Get 请求中找到的匹配总数的最佳方法是什么?

网络接口:

[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 功能?

4

1 回答 1

1

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

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

也就是说,您可以做一个简单的更改来支持您的回复中的计数。您的客户端代码也必须更改。有关详细信息,请参阅此答案

于 2013-03-28T16:19:52.870 回答