ODataRoutePrefix не работает для 3-го уровня - PullRequest
1 голос
/ 07 июня 2019

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

Шаблон пути '[ШАБЛОН]' в действии 'Получить' в контроллере 'CONTROLLER-NAME 'не является допустимым шаблоном пути OData.Найден неразрешенный сегмент пути '[LAST-SEGMENT]' в шаблоне пути OData '[TEMPLATE]'.

Подробности

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

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

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

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

OData WebApi lib 6.0.0

1 Ответ

1 голос
/ 11 июня 2019

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

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

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

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

...