$inlinecount 无法使用 ApplyTo 在 ApiController 上工作
$inlinecount not working on ApiController using ApplyTo
我正在尝试在标准 Web API 2.2 ApiController
中使用 OData 过滤和分页功能。为此,我必须重写请求 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
...
}
到目前为止,一切都如预期的那样顺利。
现在,我对筛选项的总数感兴趣,因此我已将 $inlinecount=allpages
添加到查询字符串中。生成的请求 URI 如下所示:
http://localhost:54026/.../deliveries/page?$top=10&$skip=0&$inlinecount=allpages}
然后,我尝试像这样检索总计数(在调用 ApplyTo
之后):
long? totalCount = Request.ODataProperties().TotalCount;
不幸的是,无论我尝试什么,totalCount
总是保持为空。我也试过使用:
object totalCount;
Request.Properties.TryGetValue("System.Web.OData.TotalCount", out totalCount);
但运气不好。查看 Request
属性会发现 System.Web.OData.Properties
下有一个条目,但其所有属性都未初始化(Model
为空,NextLink
为空,TotalCount
为空等)。
有人知道为什么这不起作用吗?顺便说一句,我正在使用 Microsoft.AspNet.OData
v5.6.
我必须指定 $count=true
而不是 $inlinecount=allpages
。根据 https://damienbod.wordpress.com/2014/06/13/web-api-and-odata-v4-queries-functions-and-attribute-routing-part-2/,这是某处的重大更改。
我正在尝试在标准 Web API 2.2 ApiController
中使用 OData 过滤和分页功能。为此,我必须重写请求 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
...
}
到目前为止,一切都如预期的那样顺利。
现在,我对筛选项的总数感兴趣,因此我已将 $inlinecount=allpages
添加到查询字符串中。生成的请求 URI 如下所示:
http://localhost:54026/.../deliveries/page?$top=10&$skip=0&$inlinecount=allpages}
然后,我尝试像这样检索总计数(在调用 ApplyTo
之后):
long? totalCount = Request.ODataProperties().TotalCount;
不幸的是,无论我尝试什么,totalCount
总是保持为空。我也试过使用:
object totalCount;
Request.Properties.TryGetValue("System.Web.OData.TotalCount", out totalCount);
但运气不好。查看 Request
属性会发现 System.Web.OData.Properties
下有一个条目,但其所有属性都未初始化(Model
为空,NextLink
为空,TotalCount
为空等)。
有人知道为什么这不起作用吗?顺便说一句,我正在使用 Microsoft.AspNet.OData
v5.6.
我必须指定 $count=true
而不是 $inlinecount=allpages
。根据 https://damienbod.wordpress.com/2014/06/13/web-api-and-odata-v4-queries-functions-and-attribute-routing-part-2/,这是某处的重大更改。