Разбивка на страницы с AspNetCore.OData - отсутствующие свойства @odata в ответе - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь реализовать разбиение на страницы с ядром asp.net 2.2 и Microsoft.AspNetCore.OData 7.1.0 со следующей конфигурацией:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOData();
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc(b =>
        {
            b.EnableDependencyInjection();
        });
    }
}

Для этого у меня есть тестовый контроллер:

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    [HttpGet]
    [EnableQuery(PageSize = 5)]
    public IQueryable<int> Get()
    {
        return new int[] { 1,2,3,4,5,6,7,8,9,10 }.AsQueryable();
    }
}

При вызове конечной точки я ожидаю ответ типа:

{  
  "@odata.context":...,
  "value":[1,2,3,4,5],
  "@odata.nextLink":...  
}

но вместо этого я получаю только:

[1,2,3,4,5]

Так как мне получить эти дополнительные свойства @odata?

1 Ответ

0 голосов
/ 21 апреля 2019

Наконец-то я разобрался, как это сделать.

Сначала он не работает с примитивными типами, поэтому мне пришлось создать сильный со свойством Id:

public class Value
{
    public Value(int id)
    {
        Id = id;
    }

    public int Id { get; set; }
}

Во-вторых, мне пришлось удалить атрибуты ApiController и Route с контроллера.

public class ValuesController : ControllerBase
{
    [HttpGet]
    [EnableQuery(PageSize = 5)]
    public IQueryable<Value> Get()
    {
        return Enumerable.Range(1, 10).Select(i => new Value(i)).AsQueryable();
    }
}

И, наконец, зарегистрировать конечную точку оддаты:

ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Value>("Values");
app.UseOData("odata", "api", builder.GetEdmModel());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...