首页 > 解决方案 > 服务器返回对象的普通列表而不是 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"
    }
]
}

标签: c#asp.net-corecountasp.net-core-mvcodata

解决方案


推荐阅读