Наш продукт создал CustomODataVersionControllerSelector для использования префикса (например, v2 /) в URL для разных версий контроллера.Так как версия в URL-адресе является просто префиксом, OData использует только одатар для поиска контроллера и действия и возвращает первый соответствующий контроллер / действие из attributeMapping, поэтому один и тот же одатар может быть сопоставлен с несколькими контроллерами и действиями.Иногда наши клиенты обращаются к конечным точкам v2, даже если они пытаются получить контроллер v1.Что мы должны сделать, чтобы заставить OData найти правильный контроллер и действие?
Мы настроили функцию GetControllerName, чтобы она всегда возвращала базовую версию имени контроллера, а затем добавляла версию, читая URL-адрес, чтобы создать реальное имя контроллера.Этот обходной путь помогает найти правильную версию контроллера, но отображение действий по-прежнему остается проблемой.
public class TableDataController : ODataController
{
…
[ODataRoute(datasets(dataset_name)/tables(table_name)/items)]
public async Task<IHttpActionResult> GetItems
{
…
}
…
}
public class TableDataV2Controller : ODataController
{
…
[ODataRoute(v2/datasets(dataset_name)/tables(table_name)/items)]
public async Task<IHttpActionResult> GetItemsV2
{
…
}
…
}