У меня есть контроллер API, который вызывает экземпляры ODataController для получения данных.
Насколько я понял, я могу сделать это путем создания экземпляра контроллера, вызова метода Get()
и последующего применения атрибута EnableQueryAttribute.
string ODataQuery = "/odata/entity?$filter=...&$top=1";
// Get the queryable
DataController dc = new DataController();
IQueryable queryable = dc.Get();
// Get the EdmModel
IEdmModel model = WebApiConfig.GetEdmModel();
// constructing requirements for OData query
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, reportRequest.DataUriDecoded);
ODataQueryContext ctx = new ODataQueryContext(model, typeof(Medizinprodukte), null);
requestMessage.Properties[HttpPropertyKeys.HttpConfigurationKey] = new HttpConfiguration();
ODataQueryOptions queryOptions = new ODataQueryOptions(ctx, requestMessage);
// Apply OData Query
EnableQueryAttribute enableQuery = new EnableQueryAttribute();
var result = enableQuery.ApplyQuery(queryable, queryOptions);
Построение ODataQueryOptions завершается неудачей с исключением
"No non-OData HTTP route registered."
Полагаю, это восходит к тому, как я построил ODataQueryContext
, передав NULL в качестве параметра ODataPath
.
К сожалению, я не могу найти рабочий способ создания экземпляра ODataPath, который запрашивался ранее, но разрешен только для более старой версии OData .
Есть идеи, как это решить?