ODataRoutePrefix не работает для 3-го уровня

Когда я пытаюсь использовать сегмент третьего уровня с атрибутом [ODataRoutePrefix], возникает такая ошибка:

Шаблон пути «[ШАБЛОН]» для действия «Получить» в контроллере «ИМЯ-КОНТРОЛЛЕРА» не является допустимым шаблоном пути OData. Обнаружен неразрешенный сегмент пути «[LAST-SEGMENT]» в шаблоне пути OData «[TEMPLATE]».

Подробности

  • ODataRoutePrefix для родительского сегмента, который работает: [ODataRoutePrefix("lawsuits/{parentId}/depositsGuarantees")]
  • ODataRoutePrefix для нового контроллера, который НЕ РАБОТАЕТ: [ODataRoutePrefix("lawsuits/{parentId}/depositsGuarantees/{subResourceId}/customFields")]
  • Сообщение об ошибке при запуске API (config.EnsureInitialized()): Шаблон пути 'lawsuits/{parentId}/depositsGuarantees/{subResourceId}/customFields' в действии 'Get' в контроллере 'LawsuitDepositGuaranteeCustomFields' не является допустимым шаблоном пути OData. Обнаружен неразрешенный сегмент пути «customFields» в шаблоне пути OData «lawsuits/{parentId}/depositsGuarantees/{subResourceId}/customFields».

Дополнительная информация

  • Методы действия должным образом ожидают параметров, определенных в префиксе маршрута. Пример:
public IHttpActionResult Get(int parentId, int subResourceId)
{
    // [...]
}
  • Хотя он жаловался, что «найден неразрешенный сегмент пути «customFields», тот же сегмент работает для других существующих контроллеров с префиксом, подобным следующему: [ODataRoutePrefix("lawsuits/{parentId}/customFields")], что означает, что в OData зарегистрирована модель для сегмента «customFields».

Затронутые сборки

Библиотека OData WebApi 6.0.0


person Alexandre Ribeiro    schedule 06.06.2019    source источник


Ответы (1)


нашел в чем проблема...

В модели для сегмента depositsGuarantees отсутствовало свойство коллекции модели, зарегистрированной для сегмента customFields. На практике это свойство отсутствовало:

public IEnumerable<CustomFieldModel> CustomFields { get; set; }

Я все еще задаюсь вопросом, должен ли я действительно использовать lawsuits/{parentId}/depositsGuarantees/{subResourceId}/customFields или только depositsGuarantees/{parentId}/customFields (хотя depositsGuarantees также является вспомогательным ресурсом), но это скорее концептуальное обсуждение.

person Alexandre Ribeiro    schedule 10.06.2019