2016-09-21 7 views
9

Я использую OData Web API для Версии 4, когда я пытаюсь выполнить запрос OData web Api с помощью параметра $top, он возвращает мне следующее сообщение об исключении.OData Exception Превышен предел '0' для верхнего запроса

Неверный запрос, указанный в URI. Превышен предел «0» для верхнего запроса. Значение из входящего запроса является «10»

Я использую Apache Ignite Dotnet LINQ в качестве источника данных вместо Entity Framework, мой OData метод действия контроллера заключается в следующем:

[EnableQuery] 
public IQueryable<Productioncurvepnl> GetProductioncurvepnl() 
{ 
    Console.WriteLine("Starting query to ignite"); 
    var q = AIgniteClient.IgniteClient.Instance.ProductionCurvePnLCache.AsCacheQueryable().Select(c => c.Value); 
    return q; 
} 
+0

Пожалуйста, также включают в себя полный URL, который вы используете в вопросе. – Igor

+0

http: // localhost: 9000/odata/Productioncurvepnl? $ Top = 10 – Abdul

ответ

21

С Web API OData V6.0.0 необходимо включить параметры запроса, чтобы эта работа работала. Это может быть сделано во всем мире в WebApiConfig.Register(HttpConfiguration config)

config.Select().Expand().Filter().OrderBy().MaxTop(null).Count(); 

или непосредственно на ваших моделях, для мелкозернистой конфигурации:

[Page(MaxTop = 100)] 
public class Products 

Более подробную информацию можно найти в documentation

+0

Его работая как шарм. Спасибо –

+1

Спасибо, хотел бы, чтобы я смог подхватить кувалдой ... –

+1

для 'config.Select()' to work add 'using System.Web.OData.Extensions;' надеюсь кому-то помочь. – stom

1

Основываясь на возвращенное сообщение об ошибке, скорее всего, проблема в том, что MaxTop не определен. Вы можете сделать это с помощью EnableQueryAttribute на ваш метод, как так (изменить значение, как вы видите нужным), я использовал значение 100.

[EnableQuery(MaxTop = 100)] 
public IQueryable<Productioncurvepnl> GetProductioncurvepnl() 
{ 
    Console.WriteLine("Starting query to ignite"); 
    var q = AIgniteClient.IgniteClient.Instance.ProductionCurvePnLCache.AsCacheQueryable().Select(c => c.Value); 
    return q; 
} 

См EnableQueryAttribute для более подробной информации.

0

Для меня [EnableQuery (Max Top = 100)] не работает, но [Queryable] работает нормально. [EnableQuery (Max Top = 100)] должен работать, но не знаю, почему он не работает. Кто-то знает, тогда, пожалуйста, дайте мне знать. Но сейчас я использую [Queryable].

+1

Queryable устарел, я отправил ответ с двумя подходами. Либо настроить его по всему миру, либо по модели – ogrim