Маршрутизация атрибутов OData: один контроллер для нескольких типов данных

Я читаю блог обновления OData V4: https://blogs.msdn.microsoft.com/webdev/2014/03/13/getting-started-with-asp-net-web-api-2-2-for-odata-v4-0/

В нем упоминается недавно добавленный атрибут [ODataRoute] для маршрутизации атрибутов. В традиционном WebApiController я могу указать маршруты, используя атрибуты [Route] для нескольких типов. Например, у меня есть два класса Travel и 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? (Я пытался просто заменить [Route] на [ODataRoute], но это не сработало)


person user3670419    schedule 26.04.2016    source источник


Ответы (1)


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

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/, который будет использовать один предопределенный контроллер для обработки всех запросов.

person Vincent    schedule 27.04.2016