You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make a request to GET /people/2/books?include=people
A 500 error is returned.
Stack trace:
fail: JsonApiDotNetCore.Middleware.ExceptionHandler[0]
Property 'Int32 BookId' is not defined for type 'Test.Book' (Parameter 'property')
System.ArgumentException: Property 'Int32 BookId' is not defined for type 'Test.Book' (Parameter 'property')
at MemberExpression System.Linq.Expressions.Expression.Property(Expression expression, PropertyInfo property)
at MemberAssignment JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreatePropertyAssignment(PropertySelector selector, LambdaScope lambdaScope) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 131
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreateLambdaBodyInitializer(IDictionary<ResourceFieldAttribute, QueryLayer> selectors, ResourceContext resourceContext, LambdaScope lambdaScope, bool lambdaAccessorRequiresTestForNull)+(PropertySelector selector) => { } in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 64
at bool System.Linq.Enumerable+SelectEnumerableIterator<TSource, TResult>.MoveNext()
at void System.Collections.Generic.LargeArrayBuilder<T>.AddRange(IEnumerable<T> items)
at T[] System.Collections.Generic.EnumerableHelpers.ToArray<T>(IEnumerable<T> source)
at TSource[] System.Linq.Enumerable.ToArray<TSource>(IEnumerable<TSource> source)
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreateLambdaBodyInitializer(IDictionary<ResourceFieldAttribute, QueryLayer> selectors, ResourceContext resourceContext, LambdaScope lambdaScope, bool lambdaAccessorRequiresTestForNull) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 64
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.ApplySelect(IDictionary<ResourceFieldAttribute, QueryLayer> selectors, ResourceContext resourceContext) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 53
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.QueryableBuilder.ApplyProjection(Expression source, IDictionary<ResourceFieldAttribute, QueryLayer> projection, ResourceContext resourceContext) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs:line 112
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.QueryableBuilder.ApplyQuery(QueryLayer layer) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs:line 69
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreateCollectionInitializer(LambdaScope lambdaScope, PropertyInfo collectionProperty, Type elementType, QueryLayer layer, LambdaScopeFactory lambdaScopeFactory) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 174
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreateAssignmentRightHandSideForLayer(QueryLayer layer, LambdaScope outerLambdaScope, MemberExpression propertyAccess, PropertyInfo selectorPropertyInfo, LambdaScopeFactory lambdaScopeFactory) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 154
at MemberAssignment JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreatePropertyAssignment(PropertySelector selector, LambdaScope lambdaScope) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 139
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreateLambdaBodyInitializer(IDictionary<ResourceFieldAttribute, QueryLayer> selectors, ResourceContext resourceContext, LambdaScope lambdaScope, bool lambdaAccessorRequiresTestForNull)+(PropertySelector selector) => { } in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 64
at bool System.Linq.Enumerable+SelectEnumerableIterator<TSource, TResult>.MoveNext()
at void System.Collections.Generic.LargeArrayBuilder<T>.AddRange(IEnumerable<T> items)
at T[] System.Collections.Generic.EnumerableHelpers.ToArray<T>(IEnumerable<T> source)
at TSource[] System.Linq.Enumerable.ToArray<TSource>(IEnumerable<TSource> source)
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.CreateLambdaBodyInitializer(IDictionary<ResourceFieldAttribute, QueryLayer> selectors, ResourceContext resourceContext, LambdaScope lambdaScope, bool lambdaAccessorRequiresTestForNull) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 64
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.SelectClauseBuilder.ApplySelect(IDictionary<ResourceFieldAttribute, QueryLayer> selectors, ResourceContext resourceContext) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs:line 53
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.QueryableBuilder.ApplyProjection(Expression source, IDictionary<ResourceFieldAttribute, QueryLayer> projection, ResourceContext resourceContext) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs:line 112
at Expression JsonApiDotNetCore.Queries.Internal.QueryableBuilding.QueryableBuilder.ApplyQuery(QueryLayer layer) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs:line 69
at IQueryable<TResource> JsonApiDotNetCore.Repositories.EntityFrameworkCoreRepository<TResource, TId>.ApplyQueryLayer(QueryLayer layer) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs:line 100
at async Task<IReadOnlyCollection<TResource>> JsonApiDotNetCore.Repositories.EntityFrameworkCoreRepository<TResource, TId>.GetAsync(QueryLayer layer) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs:line 59
at async Task<object> JsonApiDotNetCore.Services.JsonApiResourceService<TResource, TId>.GetSecondaryAsync(TId id, string relationshipName) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs:line 236
at async Task<IActionResult> JsonApiDotNetCore.Controllers.BaseJsonApiController<TResource, TId>.GetSecondaryAsync(TId id, string relationshipName) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs:line 137
at async Task<IActionResult> JsonApiDotNetCore.Controllers.JsonApiController<TResource, TId>.GetSecondaryAsync(TId id, string relationshipName) in C:/Users/e400092/source/repos/JsonApiDotNetCore/src/JsonApiDotNetCore/Controllers/JsonApiController.cs:line 59
at async ValueTask<IActionResult> Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
at TResult System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>.GetResult()
at async Task Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()+Awaited(?)
at async Task Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()+Awaited(?)
at void Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Task Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
at Task Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
at async Task Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeNextExceptionFilterAsync()+Awaited(?)
To confirm that the error does not occur on v4.0.0-alpha5:
First of all, thanks for the excellent repro steps!
Despite that, it still took me several hours to investigate why this was going wrong. A big difference with alpha4 is that beta1 contains a complete redesign/rewrite for building expression trees.
Anyway, I have a fix available that I'm about to push shortly.
Description
Requesting related data of the form
/resource1/{id}/resource2?include=resource1
worked in v4.0.0-alpha5, but seems to no longer work in v4.0.0-beta1.Repro steps
To reproduce on v4.0.0-beta1:
src/Examples/IncludeBug
project/people/2/books?include=people
Stack trace:
To confirm that the error does not occur on v4.0.0-alpha5:
src/Examples/IncludeBug
project/people/2/books?include=people
Environment
The text was updated successfully, but these errors were encountered: