0

To get the inline count in odata style from a webapi2 controller I read on this page: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options that I should return a PagedResult from my method. I made my method in my apicontroller like this:

public PageResult<Software> Get(ODataQueryOptions<Software> options)
    {

        ODataQuerySettings settings = new ODataQuerySettings()
        {

        };

        IQueryable results = options.ApplyTo(db.Software, settings);

        return new PageResult<Software>(
            results as IEnumerable<Software>,
            Request.ODataProperties().NextLink,
            Request.ODataProperties().TotalCount
            );
    }

This works fine for request like this:

http://dummy.com/api/Softwareapi?$inlinecount=allpages&$filter=Deleted%20eq%20false&$orderby=SequenceNo&$top=7&$skip=0

But for a request like this:

http://dummy.com/api/Softwareapi?$inlinecount=allpages&$filter=Deleted%20eq%20false&$orderby=SequenceNo&$top=7&$skip=0&$expand=Supplier

I get:

    <Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>Value cannot be null. Parameter name: data</ExceptionMessage>
<ExceptionType>System.ArgumentNullException</ExceptionType>
<StackTrace>
at System.Web.Http.OData.PageResult`1..ctor(IEnumerable`1 items, Uri nextPageLink, Nullable`1 count) at DigiCampuz.Controllers.SoftwareApiController.Get(ODataQueryOptions`1 options) in c:\Users\bzs\Documents\Visual Studio 2012\Projects\DigiCampuz Webapp\DigiCampuz\Controllers\SoftwareApiController.cs:line 41 at lambda_method(Closure , Object , Object[] ) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 

If I use quick-watch feature in the vs debugger I can see results has the correct amount of items and those items have suppliers, but I cannot seem to get pagedresult to see that.

Does anybody here want to help me with this?

zu1b
  • 422
  • 5
  • 11
  • Here is an example of what I did to get "Expand" to work. Let me know if it works for you. http://stackoverflow.com/questions/26405822/webapi-odata-expand-with-entity-framework-functions – goroth Oct 21 '14 at 20:14
  • In the end I just switch to full odatav4 based controllers, no problems and more options. – zu1b Nov 17 '14 at 16:27

0 Answers0