我希望在ProductController中创建一个未绑定的函数,它返回完全不同的实体(与Product无关)。
[EnableQuery]
public class ProductsController : ODataController
{
[HttpGet]
[ODataRoute("InvokeMyUnBoundFunction(Id={id})")]
public IHttpActionResult InvokeMyUnBoundFunction(int id)
{
TestUnBound testObj= new TestUnBound();
testObj.Name = "Test" + id;
return Ok(testObj);
}
}
我的webApiConfig是
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
builder.EntitySet<TestUnBound>("TestUnBounds"); //Its not related to Product.
builder.Function("InvokeMyUnBoundFunction").Returns<TestUnBound>().Parameter<int>("Id");
但是当我调用时 http://localhost:port/api/odata/InvokeMyUnBoundFunction(Id=1234) 我收到了一条错误消息,如
“无法从OData中找到相关实体集或单例 路径。需要相关的实体集或单例来序列化 有效载荷“。
我错过了任何概念吗?
答案 0 :(得分:8)
你应该使用
ReturnsFromEntitySet<TestUnBound>
的实例
Returns<TestUnBound>
答案 1 :(得分:1)
在OData v4中,将函数声明更改为:
builder.Function("InvokeMyUnBoundFunction").ReturnsCollectionFromEntitySet<TestUnBound>().Parameter<int>("Id");
代替ReturnsFromEntitySet<TestUnBound>
,如答案所示。