0

Читаем блог обновления OData V4: https://blogs.msdn.microsoft.com/webdev/2014/03/13/getting-started-with-asp-net-web-api-2-2-for-odata-v4-0/OData атрибуты маршрутизации: один контроллер для нескольких типов данных

Он упоминает вновь добавленный [ODataRoute] атрибут для маршрутизации атрибутов. В традиционном WebApiController я могу указать маршруты, используя атрибуты [Маршрут] для нескольких типов. Например, скажем, у меня есть два класса Travel and Hotel. Я могу иметь один контроллер для обоих из них на:

public class DefaultController : WebApiController { 
[Route("travel/{id}")] 
[Route("hotel/{id}")] 
public HttpResponseMessage Get(int id) 
{ 
    // Implementation here 
} 

С OData стека, каждый тип данных привязан к контроллеру по умолчанию, что означает, мне нужно два контроллера:

public class TravelController : ODataController{ } 

public class HotelController : ODataController{ } 

Так есть способ маршрутизации нескольких типов данных в один контроллер с помощью ODataController и ODataRoute? (Я попытался просто заменить [маршрут] с [ODataRoute], но он не работает)

ответ

2

Вы можете сделать так,

public class MyController : ODataController 

{ 
    [HttpGet] 
    [ODataRoute("Airlines({id})")] 
    [ODataRoute("People({id})")] 
    public IHttpActionResult Get([FromODataUri] string id) 
    { 
     return Ok("Empty"+id); 
    } 
} 

Я проверить это, она работает хорошо, и обратите внимание на имя контроллера не начинать с любого имени набора объектов.

Также, если вы вообще не хотите писать контроллер, вы можете обратиться к этой библиотеке http://odata.github.io/RESTier/, которая будет использовать один предопределенный контроллер для обработки всех запросов.