使用apicontroller返回odata$计数



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

例如:/产品$count=true返回的数据没有odataexception,但不返回计数。任何建议

您可以单独获取count,并将其与数据一起放入新的字典中,在控制器的方法中返回该字典。以下代码应用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

最新更新