Asp.Net Core 3.1 OData не работает с маршрутизацией атрибутов и не работает с параметрами

Возможно ли достичь следующего маршрута с Asp.Net Core 3.1 и Microsoft.AspNetCore.OData версии 7.3.0:

/ParentEntity({id})/Children(OnlyActive={onlyActive})

Чего я добился:

Метод контроллера:

[HttpGet]
[ODataRoute("ParentEntity({id})/Children")]
public async Task<IActionResult> Children([FromODataUri] string id)
{
    // some data fetching operations.
}

Со следующей конфигурацией модели:

builder.EntityType<ParentEntity>().Function("Children")
                .ReturnsCollectionFromEntitySet<ChildEntity>("ChildEntity");

Работает нормально, и я могу получить параметр id в методе Children.

Но когда я пытаюсь сделать что-то вроде:

[HttpGet]
[ODataRoute("ParentEntity({id})/Children(OnlyActive={onlyActive})")]
public async Task<IActionResult> Children([FromODataUri] string id, [FromODataUri] bool onlyActive)
{
   // some data fetching operations.
}

С конфигурацией модели:

FunctionConfiguration getFunc = builder.EntityType<ParentEntity>().Function("Children")
                    .ReturnsCollectionFromEntitySet<ChildEntity>("ChildEntity");

getFunc.Parameter<bool>("OnlyActive");

Я получаю сообщение об ошибке:

Microsoft.OData.ODataException: «Плохой запрос - ошибка в синтаксисе запроса»

Можно ли таким образом использовать функции Odata? Или попробовать другой подход?


person Maxim    schedule 25.01.2021    source источник


Ответы (1)


Мне удалось добиться такого поведения, указав пространство имен Deafult в пути в атрибуте ODataRoute.

После долгих попыток это сработало для меня:

[HttpGet]
[ODataRoute("ParentEntity({id})/Default.Children(OnlyActive={onlyActive})")]
public async Task<IActionResult> Children([FromODataUri]string id, [FromODataUri]bool onlyActive)

Конфигурация модели:

FunctionConfiguration getFunc = builder.EntityType<ParentEntity>().Function("Children")
                    .ReturnsCollectionFromEntitySet<ChildEntity>("ChildEntity");

getFunc.Parameter<bool>("OnlyActive");

Я нашел пример связанной функции с параметрами в это руководство от Сэм Сюй.

person Maxim    schedule 25.01.2021