【问题标题】:WebAPI OData and skip/paging in DocumentDB/CosmosDBDocumentDB/CosmosDB 中的 WebAPI OData 和跳过/分页
【发布时间】:2018-09-26 05:32:18
【问题描述】:

这个问题以前是在here 上发布的,但我在这里重复这个问题和讨论的摘要,以获得一个完整的问题。

我在 ASP.NET WebAPI 中设置了一个 ODataController,并使用 DocumentDB/CosmosDB 作为后端。它工作得很好,我返回了 CreateDocumentQuery 的结果,$select、$top、$orderby 和 $filter 工作正常。

但是,$skip 没有。我知道这是一个计划中的功能(投票here),但我想知道是否有任何临时解决方法。

我的计划是为我的 OData 控制器操作添加一个“continuationToken”参数。然后,我将使用 FeedOptions.RequestContinuation 将其传递给 CreateDocumentQuery。但是,CreateDocumentQuery 不返回响应令牌。然后我尝试使用 ReadDocumentFeedAsync,它确实返回一个响应令牌,但它不返回一个 IQueryable。

这是一个 ODataController 中的 api 代码示例:

public IQueryable<Result> FindResults(Uri collectionUri, string continuationToken)
{
    FeedOptions feedOptions = new FeedOptions();
    feedOptions.MaxItemCount = 100;
    feedOptions.RequestContinuation = continuationToken;
    var query = client.CreateDocumentQuery<Result>(collectionUri, queryString, feedOptions).AsDocumentQuery();
    return query as IQueryable<Result>;
}

但是,客户端代码会是什么样子? IE。保持 IQueryable 活动以能够在分页时使用 continuationToken 所需的 http 请求是什么? 我想我可以将 ReadDocumentFeedAsync 的结果存储在内存中并返回一个 IQueryable,但是有更好的解决方案吗?

【问题讨论】:

  • 我也有类似的情况。你有什么解决办法吗?如果有,可以分享一下吗?
  • 很遗憾,目前还没有解决方案。我没有时间再看它,但如果我找到解决方案,我会在这里发帖。

标签: asp.net-web-api odata azure-cosmosdb


【解决方案1】:

您查看 PageResult 对象了吗?

对于非 OData 格式,仍然可以通过将查询结果包装在 PageResult 对象中来支持下一页链接和内联计数。但是,它需要更多的代码。这是一个例子:

public PageResult<Product> Get(ODataQueryOptions<Product> options)
{
ODataQuerySettings settings = new ODataQuerySettings()
{
    PageSize = 5
};

IQueryable results = options.ApplyTo(_products.AsQueryable(), settings);

return new PageResult<Product>(
    results as IEnumerable<Product>, 
    Request.GetNextPageLink(), 
    Request.GetInlineCount());
}

https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

【讨论】:

  • 您好,感谢您的回答。但我仍然想返回 Odata。我假设这将返回一个实际页面,而不是 OData?
  • 这将返回 OData PageResult 对象。
猜你喜欢
  • 2012-05-29
  • 2013-03-12
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 2013-02-25
  • 2019-03-24
  • 1970-01-01
  • 2019-07-16
相关资源
最近更新 更多