В моем приложении реализована конфигурация ODATA.Все выглядит хорошо, некоторые операторы ODATA, такие как Filter, Select, Top работают, но в результате получается просто список простых объектов, а не отформатированные оддаты.Вот почему некоторые операторы, такие как $ count, не работают.
Вот мой Startup
класс
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(x => x.EnableEndpointRouting = false).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddOData();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
IEdmModel model = GetEdmModel(app.ApplicationServices);
app.UseMvc(route =>
{
route.Expand().Select().Filter().OrderBy().MaxTop(null).Count();
route.EnableDependencyInjection();
route.MapODataServiceRoute("ODataRoute", "odata", model);
route.MapRoute("default", "api/{controller}/{action}");
});
}
private static IEdmModel GetEdmModel(IServiceProvider serviceProvider)
{
var builder = new ODataConventionModelBuilder(serviceProvider);
builder.EntitySet<Models.Customer>("Customers");
return builder.GetEdmModel();
}
Вот мой метод действия в HomeController
class
[EnableQuery]
public IQueryable GetList()
{
MyContext db = new MyContext();
return db.Customers;
}
Запрос к .../odata/Customers
возвращает 404. Не найдено.
Запрос к .../api/Home/GetList?$top=2&$select=id,name&$count=true
возвращает этот JSON:
[
{
"Id": 748885,
"Name": "VALERİY ŞAMƏMMƏDOVİÇ ŞİRİNOV"
},
{
"Id": 748886,
"Name": "VAQİF ƏBÜLFƏT MƏMMƏDOV"
}
]
Но ожидаемый результат:
{
"@odata.context": "http://localhost:60071/odata/$metadata",
"@odata.count": 123,
"value": [
{
"Id": 748885,
"Name": "VALERİY ŞAMƏMMƏDOVİÇ ŞİRİNOV"
},
{
"Id": 748886,
"Name": "VAQİF ƏBÜLFƏT MƏMMƏDOV"
}
]
}