使用apicontroller返回odata。$ count

时间:2014-10-23 08:01:44

标签: asp.net-web-api odata

我有从ApiController继承的控制器。我在其顶部有EnableQuery属性以允许ODATA查询字符串。但是$ count不起作用。

例如: - ../products?$ count = true确实返回没有odataexception的数据,但不返回计数。任何建议

1 个答案:

答案 0 :(得分:0)

您可以单独计数并将其与数据一起放入新词典中,并在控制器的方法中返回此词典。以下代码适用于OData查询中指定的所有内容(包括选择,展开和过滤)并返回数据和计数:

public class ProductsController : ApiController
{    
    public IHttpActionResult Get(ODataQueryOptions<Product> queryOptions)
    {
        IQueryable<Product> products = ... ///any IQueryable<Product>
        var results = queryOptions.ApplyTo(products);
        var dict = new Dictionary<string, object>();
        if (Request.ODataProperties().TotalCount != null)
        {
            dict.Add("@odata.count", Request.ODataProperties().TotalCount);
        }
        dict.Add("value", results);
        return Ok(dict);
    }
}

但是,要以ASP.NET Web API文档推荐的方式使用ODATA,您需要使用ODataController而不是ApiController