C# 忽略Web API OData v4$count=true

C# 忽略Web API OData v4$count=true,c#,asp.net-web-api,odata,C#,Asp.net Web Api,Odata,我启动了一个新的web api项目,正在使用最新的OData库,但我无法让$count像以前3.0版本的OData库那样工作。无论我尝试了什么,我总是返回json对象的数组,而不是包含在一个对象中,该对象应该具有原始未筛选/排序集合中的项目总数 几乎所有其他功能都能正常工作,我可以使用$filter,$top,$skip,和$orderby。我还没有试过别的东西。我还尝试返回实体的硬编码列表,而不是DbSet,但这没有任何区别 有谁能告诉我,我需要做些什么才能让它工作?下面是回购协议所需的全部代

我启动了一个新的web api项目,正在使用最新的OData库,但我无法让
$count
像以前3.0版本的OData库那样工作。无论我尝试了什么,我总是返回json对象的数组,而不是包含在一个对象中,该对象应该具有原始未筛选/排序集合中的项目总数

几乎所有其他功能都能正常工作,我可以使用
$filter
$top
$skip
,和
$orderby
。我还没有试过别的东西。我还尝试返回实体的硬编码列表,而不是
DbSet
,但这没有任何区别

有谁能告诉我,我需要做些什么才能让它工作?下面是回购协议所需的全部代码,我只展示相关代码(至少我认为是相关代码)。如果还有什么我需要展示的,请询问

packages.config

<package id="Microsoft.AspNet.WebApi" version="5.2.3" />
<package id="Microsoft.AspNet.OData" version="6.0.0" />
<package id="Microsoft.OData.Core" version="7.0.0" />
<package id="Microsoft.OData.Edm" version="7.0.0" />
WebApiConfig.cs

public static void Register(HttpConfiguration config) {
    config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
    config.MapODataServiceRoute("odata", "odata", GetModel());
}
public static IEdmModel GetModel() {
    var builder = new ODataConventionModelBuilder();
    builder.EnableLowerCamelCase();
    var companySet = builder.EntitySet<Model.Company>("Company").EntityType.HasKey(x => x.CompanyId);
    return builder.GetEdmModel();
}
[ODataRoutePrefix("Company")]
public sealed class CompanyController : ApiController {
    private DbContext context;
    public CompanyController(DbContext context) {
        this.context = context;
    }

    [EnableQuery] // also tried with [EnableQuery(MaxNodeCount = 50, MaxTop = 100, PageSize = 100)]
    [ODataRoute]
    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok(context.Set<Company>());
    }
}
[{"companyId":2,"name":"Company 1","state":1,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":3,"name":"Mars","state":0,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":4,"name":"Veronica","state":0,"createdOn":"2016-11-12T21:10:41"}]
结果

public static void Register(HttpConfiguration config) {
    config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
    config.MapODataServiceRoute("odata", "odata", GetModel());
}
public static IEdmModel GetModel() {
    var builder = new ODataConventionModelBuilder();
    builder.EnableLowerCamelCase();
    var companySet = builder.EntitySet<Model.Company>("Company").EntityType.HasKey(x => x.CompanyId);
    return builder.GetEdmModel();
}
[ODataRoutePrefix("Company")]
public sealed class CompanyController : ApiController {
    private DbContext context;
    public CompanyController(DbContext context) {
        this.context = context;
    }

    [EnableQuery] // also tried with [EnableQuery(MaxNodeCount = 50, MaxTop = 100, PageSize = 100)]
    [ODataRoute]
    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok(context.Set<Company>());
    }
}
[{"companyId":2,"name":"Company 1","state":1,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":3,"name":"Mars","state":0,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":4,"name":"Veronica","state":0,"createdOn":"2016-11-12T21:10:41"}]
预期结果:

{  
  "@odata.context":"some local url",
  "@odata.count": 9,  
  "value": [{"companyId":2,"name":"Company 1","state":1,"createdOn":"2016-11-12T21:10:41"}
    ,{"companyId":3,"name":"Mars","state":0,"createdOn":"2016-11-12T21:10:41"}
    ,{"companyId":4,"name":"Veronica","state":0,"createdOn":"2016-11-12T21:10:41"}]
} 

我没有继承正确的控制器类型,我应该继承自
ODataController
,而不是
ApiController

public sealed class CompanyController : ODataController
这样做解决了这个问题,也解决了我所面临的一些奇怪的副作用,比如财产不被忽视