服务器返回简单的对象列表,而不是ODATA信封

时间:2019-05-15 12:30:19

标签: c# asp.net-core count asp.net-core-mvc odata

我已经在我的应用程序中实现了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"
    }
]
}

0 个答案:

没有答案