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