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

Routing OData属性路由:一个控制器用于多种数据类型,routing,odata,asp.net-web-api2,attributerouting,odatacontroller,Routing,Odata,Asp.net Web Api2,Attributerouting,Odatacontroller,我正在阅读OData V4更新博客: 它提到了用于属性路由的新添加的[ODataRoute]属性。在传统的WebApicController中,我可以通过对多种类型使用[Route]属性来指定路由。例如,假设我有两个班:旅游和酒店。我可以通过以下方式为两者配备一个控制器: public class DefaultController : WebApiController { [Route("travel/{id}")] [Route("hotel/{id}")] public HttpRespo

我正在阅读OData V4更新博客:

它提到了用于属性路由的新添加的[ODataRoute]属性。在传统的WebApicController中,我可以通过对多种类型使用[Route]属性来指定路由。例如,假设我有两个班:旅游和酒店。我可以通过以下方式为两者配备一个控制器:

public class DefaultController : WebApiController {
[Route("travel/{id}")]
[Route("hotel/{id}")]
public HttpResponseMessage Get(int id)
{
   // Implementation here
}
使用OData stack,默认情况下,每个数据类型都绑定到一个控制器,这意味着我需要两个控制器:

public class TravelController : ODataController{ }

public class HotelController : ODataController{ }
那么,有没有办法使用ODataController和ODataRoute将多种数据类型路由到一个控制器?(我试着简单地用[ODataRoute]替换[Route],但没有成功)

你可以这样做

public class MyController :  ODataController

{
    [HttpGet]
    [ODataRoute("Airlines({id})")]
    [ODataRoute("People({id})")]
    public IHttpActionResult Get([FromODataUri] string id)
    {
        return Ok("Empty"+id);
    }
}
我验证了这一点,它运行良好,并注意控制器名称不是从任何实体集名称开始的

此外,如果您根本不想编写控制器,可以参考此库,它将使用单个预定义控制器来处理所有请求