使用oData v4(特别是Microsoft.AspNet.Odata 5.3.0和Microsoft.Odata.Core 6.7.0),我的查询运算符,特别是$ select,即使我已经声明了函数,也会被忽略。函数为IsComposable = true。
有关如何使此方案有效的任何建议吗?我主要对$ filter和$ select感兴趣。
-Max
详细信息(基于https://github.com/OData/ODataSamples中的FunctionSamples)
尝试查询: http://localhost:9010/odata/Products/Default.Top10()?$ select =姓名
预期回复(摘录)
{
Name: "Product 48"
}
实际回复(摘录)
{
Id: 48,
Name: "Product 48",
Price: 986.2794056470876
}
功能声明:
// Function bound to a collection
// Returns the top 10 product, a collection
productType.Collection
.Function("Top10")
.ReturnsCollectionFromEntitySet<Product>("Products")
.IsComposable = true;
控制器:
// Returns the top ten most expensive products
[HttpGet]
public IHttpActionResult Top10()
{
var retval = _data.Values.OrderByDescending(p => p.Price).Take(10).ToList();
return Ok(retval);
}
答案 0 :(得分:3)
事实证明我需要将控制器方法标记为[EnableQuery]。