我正在阅读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]属性来指定路由。例如,假设我有两个班级旅行和酒店。我可以通过以下方式为这两个控制器配备一个控制器:
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]替换[Route]但是它不起作用)
答案 0 :(得分: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/,它将使用单个预定义控制器来处理所有请求。