OData属性路由:一个控制器用于多种数据类型

时间:2016-04-26 05:23:03

标签: routing odata asp.net-web-api2 attributerouting odatacontroller

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

1 个答案:

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