1

我正在阅读 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] 但它不起作用)

4

1 回答 1

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/它将使用单个预定义控制器来处理所有请求。

于 2016-04-27T01:02:12.090 回答