Когда оценивается trips
, он уже должен иметь фильтр personId
, например, если tripId
не был указан, то выполняемый запрос должен быть чем-то похожим на это выражение Linq to Entities
from p in db.People
where p.Id == personId
select p.Trips
Поэтому, когда присутствует tripId
, единственная разница должна заключаться в том, что в ответе применяется дополнительный фильтр поверх предыдущего запроса.
Таким образом, когда неправильный tripId
или personId
предоставляется, результатом будет либо пустой объект, либо Http 404 , Not Found . (в зависимости от вашей реализации)
Вы не упомянули, какое промежуточное ПО, версию OData или ORM вы используете, так что все спекуляции на OData v4 с использованием ASP. Net ODataLib, мне пришлось реализовать свой собственные логики c на каждом контроллере, который я хотел поддерживать этот тип вложенной навигации, но соглашение было тем же, каждый уровень маршрута навигации добавлял новый критерий к запросу select поверх запроса, предоставленного контроллером родительского маршрута.