2017-01-06 11 views
0

В настоящее время у меня есть C# WebAPI, который использует версию OData, которую мы написали. Мы хотим начать использовать OData4 от Microsoft, который может сделать больше, чем наша пользовательская реализация.C# OData4 Применить запрос OData без возврата контроллера Queryable

Создание контроллера, который расширяет ODataController. Я могу создать контроллер, который автоматически запрашивает на основе строки запроса. (Показано ниже)

Проблема в том, что он возвращает результаты запроса, когда я хочу, чтобы он возвращал объект Result, который включает в себя дополнительные данные. Когда я устанавливаю возвращаемый тип в Result, но он больше не будет применять строку запроса.

Как я могу использовать автоматическую реализацию запроса и все еще возвращать свой собственный объект? Я попытался сделать общедоступный метод, который возвращает правильный объект и вызывает частный метод, возвращающий запрос, но он не фильтрует запрос правильно.

Я нахожусь на правильном пути или есть другие варианты?

public class CallController : ODataController 
{ 
    [EnableQuery] 
    public IQueryable<Call> GetCall() 
    { 
     var list = new List<Call> 
     { 
      new Call 
      { 
       Id = 4 
      }, 
      new Call 
      { 
       Id = 9 
      }, 
      new Call 
      { 
       Id = 1 
      } 
     }; 
     return list.AsQueryable(); 
    } 
} 

public class Call 
{ 
    public int Id { get; set; } 
} 

public class Result 
{ 
    public Call[] Calls { get; set; } 
    public string NewToken { get; set; } 
    public string Warning { get; set; } 
} 

ответ

1

Вы должны были бы перехватить ответ с атрибутом действия фильтра в onactionexecuted и преобразовать значение все, что вы хотите. Это было бы неплохо, так как было бы непонятно, какой метод действительно возвращался. Но я не вижу другого варианта с odata, поскольку результат должен быть iquerable.

 Смежные вопросы

  • Нет связанных вопросов^_^