OData v4 Web API对复合密钥的支持

OData v4 Web API对复合密钥的支持,odata,asp.net-web-api2,composite-key,Odata,Asp.net Web Api2,Composite Key,我正在使用WebAPI和odatav4构建一个odataweb服务 通过重写EntityRoutingConvention的SelectAction方法,我能够让服务支持复合键。然而,在OData的早期版本中,这是不需要的。我个人认为这是相当混乱的,我觉得我是在重新发明轮子 还有其他方法吗?使用属性路由 例如: 型号: 使用复合键识别实体的控制器方法: 请求样本: 无需覆盖路由约定。您可以使用开箱即用的前缀“key”来执行此操作: [EnableQuery] public IHttpAction

我正在使用WebAPI和odatav4构建一个odataweb服务

通过重写EntityRoutingConvention的SelectAction方法,我能够让服务支持复合键。然而,在OData的早期版本中,这是不需要的。我个人认为这是相当混乱的,我觉得我是在重新发明轮子

还有其他方法吗?

使用属性路由

例如:

型号:

使用复合键识别实体的控制器方法:

请求样本:


无需覆盖路由约定。

您可以使用开箱即用的前缀“key”来执行此操作:

[EnableQuery]
public IHttpActionResult Get([FromODataUri] int keyID, [FromODataUri] string keyName)
{
    // You business logic for retrieving the entity from your storage using the two keys and return
}
我刚刚查看了Microsoft.AspNet.OData v7.0.1


你可以找到他们的来源

谢谢,我会试试这个。这是否也支持导航属性<代码>[ODataRoute(“Products(ID={key1},Name={key2})/NavigationProperty”)@FrancescoFerraioli是的。这对我来说很有效,但你有文档支持吗?将其添加到您的答案中是个好主意。
[EnableQuery]
[ODataRoute("Products(ID={key1},Name={key2})")]
public IHttpActionResult Get([FromODataUri] int key1, [FromODataUri] string key2)
{
    // You business logic for retrieving the entity from your storage using the two keys and return
}
GET http://host/service/Products(ID=1,Name='Car')
[EnableQuery]
public IHttpActionResult Get([FromODataUri] int keyID, [FromODataUri] string keyName)
{
    // You business logic for retrieving the entity from your storage using the two keys and return
}