Quantcast
Channel: ASPNETWebStack Issue Tracker Rss Feed
Viewing all articles
Browse latest Browse all 7215

Closed Issue: Queryable attribute does not work with classes that has properties in abstract parent classes [357]

$
0
0
As described in the title.
It does work if the abstract parent class is empty, though.

Steps to reproduce:

1. Create new WebAPI project

2. Install "Microsoft.AspNet.WebApi.OData" package

3. Create abstract base class "BaseTest":
public abstract class BaseTest
{
public string Id { get; set; }
}

4. Create class "Test":
public class Test : BaseTest
{
public string Name { get; set; }
}

5. Add new api controller "OData":
public class ODataController : ApiController
{
// GET api/odata
[Queryable]
public IQueryable<Test> Get()
{
var list = new List<Test>()
{
new Test() { Id = Guid.NewGuid().ToString("N"), Name = "First" },
new Test() { Id = Guid.NewGuid().ToString("N"), Name = "Second" }
};

return list.AsQueryable();
}
}

6. Call "/api/odata" with Fiddler:
[{"Name":"First","Id":"6cbbdac9844c4ffdbbc0c19cfee3c33f"},{"Name":"Second","Id":"50597826ea5d439eb5c15714b224da1e"}]

7. Call "/api/odata?$top=1" with Fiddler:
{"Message":"An error has occurred.","ExceptionMessage":"The method 'MvcApplication2.Models.BaseTest.get_Id' is not a property accessor","ExceptionType":"System.ArgumentException","StackTrace":" at System.Linq.Expressions.Expression.GetProperty(MethodInfo mi)\r\n at System.Linq.Expressions.Expression.Property(Expression expression, MethodInfo propertyAccessor)\r\n at System.Web.Http.OData.ExpressionHelpers.GetPropertyAccessLambda(Type type, PropertyInfo propertyInfo)\r\n at System.Web.Http.OData.ExpressionHelpers.OrderBy(IQueryable query, IEdmProperty property, OrderByDirection direction, Type type, Boolean alreadyOrdered)\r\n at System.Web.Http.OData.Query.OrderByQueryOption.ApplyToCore(IQueryable query)\r\n at System.Web.Http.OData.Query.OrderByQueryOption.ApplyTo(IQueryable query)\r\n at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, Boolean handleNullPropagation, Boolean canUseDefaultOrderBy)\r\n at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, Boolean handleNullPropagation)\r\n at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query)\r\n at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response)\r\n at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t)\r\n at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)"}
Comments: Verified in latest build

Viewing all articles
Browse latest Browse all 7215

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>