具有未绑定功能的Odata:无法从OData路径中找到相关实体集或单例

时间:2015-08-08 18:35:07

标签: c# odata

我希望在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中找到相关实体集或单例   路径。需要相关的实体集或单例来序列化   有效载荷“。

我错过了任何概念吗?

2 个答案:

答案 0 :(得分:8)

你应该使用

ReturnsFromEntitySet<TestUnBound> 

的实例
Returns<TestUnBound>

答案 1 :(得分:1)

在OData v4中,将函数声明更改为:

builder.Function("InvokeMyUnBoundFunction").ReturnsCollectionFromEntitySet<TestUnBound>().Parameter<int>("Id");

代替ReturnsFromEntitySet<TestUnBound>,如答案所示。