$inlinecount 不能使用 ApplyTo 在 ApiController 上工作

Dej*_*jan 0 c# odata asp.net-web-api asp.net-web-api2

我正在尝试在标准 Web API 2.2 中使用 OData 过滤和分页功能ApiController。为此,我必须重写请求 URL 以符合 OData v4 标准。我的控制器看起来像这样:

public GridPage Get([FromUri] GridSearchCriteria criteria)
{
    Request.RequestUri = ... // convert querystring to OData v4
    var context = new ODataQueryContext(MyEdmModel.Instance, typeof(Delivery), null);
    ODataQueryOptions<Delivery> options = new ODataQueryOptions<Delivery>(context, Request);

    IQueryable<Delivery> deliveries = ... // use EF to load deliveries from DB
    var result = (IQueryable<Delivery>)options.ApplyTo(deliveries); // BTW, I wonder why there is no generic overload of ApplyTo?

    // fill and return a GridPage
    ...
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都按预期运行良好。

现在,我对过滤项目的总数感兴趣,因此我已将其添加$inlinecount=allpages到查询字符串中。生成的请求 URI 如下所示:

http://localhost:54026/.../deliveries/page?$top=10&$skip=0&$inlinecount=allpages}

然后,我试图检索这样的总数(在调用 之后ApplyTo):

long? totalCount = Request.ODataProperties().TotalCount;
Run Code Online (Sandbox Code Playgroud)

不幸的是,totalCount无论我尝试什么,总是保持为空。我也试过使用:

object totalCount;
Request.Properties.TryGetValue("System.Web.OData.TotalCount", out totalCount);
Run Code Online (Sandbox Code Playgroud)

但没有运气。查看Request属性会发现下面有一个条目,System.Web.OData.Properties但其所有属性都未初始化(Model为空、NextLink为空、TotalCount为空等)。

有人知道为什么这不起作用吗?顺便说一句,我使用的是Microsoft.AspNet.ODatav5.6。

Dej*_*jan 5

我必须指定$count=true而不是$inlinecount=allpages. 根据https://damienbod.wordpress.com/2014/06/13/web-api-and-odata-v4-queries-functions-and-attribute-routing-part-2/,这是某个地方的重大变化。