我已经在我的应用程序中实现了ODATA配置。一切似乎还可以,有些ODATA运算符(例如Filter,Select,Top)可以工作,但结果只是对象列表,而不是odata格式的。这就是为什么某些运算符(如$ 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
类中的操作方法
[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"
}
]
}