具有未绑定函数的Odata:在Odata路径中找不到相关的实体集或singleton

本文关键字:Odata 找不到 实体 singleton 绑定 函数 路径 | 更新日期: 2023-09-27 18:06:56

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

我错过了什么概念吗?

具有未绑定函数的Odata:在Odata路径中找不到相关的实体集或singleton

您应该使用

ReturnsFromEntitySet<TestUnBound> 

指令

Returns<TestUnBound>

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

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

而不是如答案所建议的CCD_ 1。