0
votes

I was wondering how you would return a navigation property with an ODataWebApi Action.

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

In the link above, they mention the example:

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

Where Checkout is the action. Say that this URL returns a Book object that has a navigation property.

Imagine the Book structure below:

Book - string Name - List Pages

Pages - string Name

Pages would be marked considered a navigation property.

In my case, whenever I trigger the Post call on the API I only get

Book - string Name

And Pages is left out.

The example below is a modified example of what was mentioned about. Basically an api that get a checks out a collection of books.

When i hit the URL: http://localhost:4448/api/v1/Books/Action.Checkout?$format=application/json;odata.metadata=full

I get the following response. It's missing the actual pages.....and just have navigation reference to pages.

   {
        @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)"
        [email protected]: "#Int64"
        ID: 0
        Name: null
        [email protected]: "#BookTypeEnum"
        Type: "Book"
        [email protected]: "#DateTimeOffset"
        CreationDate: "0001-01-01T00:00:00-08:00"
        [email protected]: "#DateTimeOffset"
        ModifyDate: "0001-01-01T00:00:00-08:00"
        Owner: null
        [email protected]: "HTTP://LOCALHOST:4448/API/V1/BOOK(0)/PAGES/$REF"
        [email protected]: "HTTP://LOCALHOST:4448/API/V1/BOOK(0)/PAGES"
    }

Any advice appreciated, Thanks D

1
Are you looking for the "http......&$expand=Pages"? - Marvin Smit
Yeah, apparently they don't work on OData action calls. msdn.microsoft.com/en-us/library/hh859851(v=vs.103).aspx "Service actions can have the same return types as service operations. However, unlike service operations, actions cannot be further composed. This means that the system query options cannot be applied to a service action." Wonder if there is a workaround? - darewreck

1 Answers

0
votes

The solution is to enable the query for OData. Specify [EnableQuery] for the function in the controller. This will give you the ability to http://localhost:4448/api/v1/Books/Action.Checkout?$expand=Pages