【问题标题】:Using the apicontroller to return odata.$count使用 apicontroller 返回 odata.$count
【发布时间】:2014-12-18 20:36:12
【问题描述】:

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

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

【问题讨论】:

  • 请向我们展示您的服务器端代码和您从服务器获得的有效负载(json)。
  • 由于您使用的是ODATA查询,我建议您继承您的控制器继承自ODataController而不是ApiController,然后您可以参考aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/…
  • 我也遇到了同样的问题,让它们从 ODataController 继承意味着用 OData 模型注册函数和类型,它不能处理非常动态的类型。

标签: asp.net-web-api odata


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2015-03-18
    • 2014-12-30
    • 2012-12-12
    相关资源
    最近更新 更多