【问题标题】:How to return navigation property with an OData WebAPI Action如何使用 OData WebAPI 操作返回导航属性
【发布时间】:2015-12-04 18:57:08
【问题描述】:

我想知道如何使用 ODataWebApi 操作返回导航属性。

示例:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions

在上面的链接中,他们提到了这个例子:

POST /entityset(key)/cast/action /Products(1)/Models.Book/CheckOut

Checkout 是操作所在。假设此 URL 返回一个具有导航属性的 Book 对象。

想象一下下面的 Book 结构:

书 - 字符串名称 - 列出页面

页面 - 字符串名称

页面将被标记为导航属性。

就我而言,每当我在 API 上触发 Post 调用时,我只会得到 ​​p>

书 - 字符串名称

Pages 被排除在外。

以下示例是上述内容的修改示例。基本上是一个 api,可以检查书籍的集合。

当我点击 URL 时:http://localhost:4448/api/v1/Books/Action.Checkout?$format=application/json;odata.metadata=full

我收到以下回复。它缺少实际页面......并且只有对页面的导航参考。

   {
        @odata.context: "HTTP://LOCALHOST:4448/API/V1/$METADATA#BOOK/$ENTITY"
        @odata.type: "#Book"
        @odata.id: "HTTP://LOCALHOST:4448/API/V1/BOOK(0)"
        @odata.editLink: "HTTP://LOCALHOST:4448/API/V1/BOOK(0)"
        ID@odata.type: "#Int64"
        ID: 0
        Name: null
        Type@odata.type: "#BookTypeEnum"
        Type: "Book"
        CreationDate@odata.type: "#DateTimeOffset"
        CreationDate: "0001-01-01T00:00:00-08:00"
        ModifyDate@odata.type: "#DateTimeOffset"
        ModifyDate: "0001-01-01T00:00:00-08:00"
        Owner: null
        Pages@odata.associationLink: "HTTP://LOCALHOST:4448/API/V1/BOOK(0)/PAGES/$REF"
        Pages@odata.navigationLink: "HTTP://LOCALHOST:4448/API/V1/BOOK(0)/PAGES"
    }

任何建议表示赞赏, 谢谢 D

【问题讨论】:

  • 您在寻找“http......&$expand=Pages”吗?
  • 是的,显然它们不适用于 OData 操作调用。 msdn.microsoft.com/en-us/library/hh859851(v=vs.103).aspx "服务操作可以具有与服务操作相同的返回类型。但是,与服务操作不同,操作不能进一步组合。这意味着系统查询选项不能应用于服务操作。"想知道是否有解决方法?

标签: odata asp.net-web-api2


【解决方案1】:

解决方案是启用 OData 查询。为控制器中的功能指定 [EnableQuery]。这将使您能够http://localhost:4448/api/v1/Books/Action.Checkout?$expand=Pages

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2013-06-13
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2015-06-01
    相关资源
    最近更新 更多