Я начал новый проект web-api и использую последние библиотеки OData, но я не могу заставить $count
работать так, как это было в предыдущей версии версий библиотек odota. Независимо от того, что я пробовал, я всегда возвращаю массив объектов json, не содержась в объекте, который должен иметь счетчик общего количества элементов в исходной нефильтрованной/отсортированной коллекции.
Почти все остальное работает, как и ожидалось, я могу использовать $filter
, $top
, $skip
и $orderby
. Я еще ничего не пробовал (пока). Я также попытался вернуть жесткий кодированный список объектов вместо DbSet<Company>
, но это не имело никакого значения.
Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы заставить это работать? Bellow - это весь код, необходимый для репо, я только показываю код revelant (по крайней мере, я думаю, что это соответствующий код). Если есть что-то еще, мне нужно показать, пожалуйста, спросите.
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" />
Компания Модель
public sealed class Company {
public int CompanyId { get; set; }
public string Name { get; set; }
public CompanyState State { get; set; } // a simple int enum
public DateTime CreatedOn { get; set; }
}
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();
}
CompanyController.cs
[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>());
}
}
Test URL
http://localhost:35743/odata/Company/?$count=true&$top=3
Результаты
[{"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"}]
}