ASP.Net MVC4 RC Web-Api Odata过滤器不能与IQueryable一起使用

Jon*_*han 14 .net c# asp.net-web-api

在ASP.net MVC4 RC的Web-api中,我像以前一样定义了Get动作:

public IQueryable<Person> Get()
    {
        var lst = ctx.GetListFromDB();
        return lst.AsQueryable();
    }
Run Code Online (Sandbox Code Playgroud)

如果我之前运行它,如果我打电话给你的网址: /api/people?$inlinecount=allpages&$format=json&$top=50&$filter=(State+eq+'AL'+and+Zip+eq+'35242')

它会对对象进行过滤,自测试版以来会发生什么变化会破坏这个?

Mar*_*inF 41

您必须在方法上放置[Queryable]属性以允许过滤.描述变化的发行说明就在这里.

更新:在RTM中,他们似乎已将此功能分离到其自己的程序集中,因此您必须包含对Microsoft的ASP.NET Web API OData程序集的引用.您可以在Nuget https://nuget.org/packages/Microsoft.AspNet.WebApi.OData上找到最新版本.

更新:在最新版本中,Queryable属性已重命名为EnableQuery.有关更改的更多信息,请参阅http://blogs.msdn.com/b/webdev/archive/2014/03/13/getting-started-with-asp-net-web-api-2-2-for-odata- v4-0.aspx

  • 这应该被标记为正确的答案 (2认同)

Vin*_*lly 10

因此,显然此功能已从最终发布计划中删除.我想这意味着我们现在需要修改现有的WebAPI操作方法,以包含必要的过滤,排序和分页参数.确实很伤心.

http://aspnetwebstack.codeplex.com/SourceControl/changeset/changes/af11adf6b3c5

...请不要因为作为坏消息的承担者而投票给我;)

  • 请参阅其他评论.只需添加[Queryable]属性即可. (3认同)