Маршрутизация атрибутов 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], но это не сработало)

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

Другие вопросы по тегам