ASP.Net MVC4 RC Web-Api Odata фильтр не работает с IQueryable
В ASP.NET MVC4 RC Web-api у меня было определенное действие Get, как раньше:
public IQueryable<Person> Get()
{
var lst = ctx.GetListFromDB();
return lst.AsQueryable();
}
Когда это было, я запускал его раньше, если бы я назвал URL-адрес:
/api/people?$inlinecount=allpages&$format=json&$top=50&$filter=(State+eq+'AL'+and+Zip+eq+'35242')
Он будет фильтровать объекты, что-то изменилось после бета-версии, которая нарушит это?
Ответы
Ответ 1
Вы должны поместить атрибут [Queryable] в метод, чтобы разрешить фильтрацию. Заметки о выпуске, описывающие изменение приведены здесь.
Обновление:
В RTM они, похоже, разделили эту функцию на свою собственную сборку, поэтому вам нужно включить ссылку на сборку ASP.NET Web API OData от Microsoft. Вы можете найти последнюю версию на 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
Таким образом, по-видимому, эта функция была удалена из графика окончательной версии. Я предполагаю, что это означает, что нам нужно будет изменить существующие методы действий WebAPI, чтобы включить необходимые параметры фильтрации, сортировки и подкачки на данный момент. Очень печально.
http://aspnetwebstack.codeplex.com/SourceControl/changeset/changes/af11adf6b3c5
... Пожалуйста, не голосуйте за то, что я являюсь носителем плохих новостей;)
Ответ 3
Из того, что я вижу (10/20/12), вам понадобится пакет https://nuget.org/packages/Microsoft.AspNet.WebApi.OData/0.1.0-alpha-120815 Nuget, чтобы заставить его работать. К сожалению, он все еще находится в предварительном выпуске.
Атрибут [Queryable] находится в этом пакете.
Я не нашел очень хорошую информацию об этом.