16

我有一个具有OrderIdProductId整数字段的实体 OrderItem ,这两个字段形成了该表的身份键/主键。 我想使用OData/Web API通过服务公开此类实体,并能够通过它们的复合 ID选择OrderItem实例。

URL的格式应该是什么?

是否有处理此类情况的最佳实践?

4

2 回答 2

26

URL 中的复合键使用如下语法:

~/OrderItems(OrderId=1234,ProductId=1234)

“语法”在OData ABNF 构造规则中定义(参见“compoundKey”的定义)

可以在 OASIS 的OData 版本 4.0 中找到一个示例用法。第 2 部分:URL 约定和勘误表 03

请注意,“复合键”(又名“复合键谓词”)自 OData 1.0 以来一直存在。

于 2012-09-20T09:47:00.563 回答
9

首先,您必须确保在配置文件中明确提及它具有复合键

builder.EntityType<OrderItem>().HasKey(t => new { t.OrderId, t.ProductId});

然后,该操作应具有以下标头

public SingleResult<OrderItem> Get([FromODataUri] string keyOrderId, [FromODataUri] string keyProductId)

请注意用于两个参数的前缀(键)!

这是 OData V4。另请参考https://odata.github.io/WebApi/13-06-KeyValueBinding/

于 2018-03-13T10:00:47.163 回答