Я работаю над созданием нового веб-API, который реализует OData 4. Я хочу, чтобы иметь возможность выбирать/расширять свойства навигации, но я получаю сообщение об ошибке, t знать, как разрешить.C# OData4 WebApi не удается расширить свойство навигации
Я отправил запрос uri, ответную ошибку, образец кода и трассировку стека ниже. Если вы посмотрите на код, «Телефоны» - это скорее метод, а не как свойство Id и Name, но я бы подумал, что я должен иметь возможность выбирать и расширять результаты этого метода точно так же, как и свойства.
Что я могу сделать, чтобы пользователи API могли выбирать значения, возвращаемые этим методом?
P.S. Навигация свойство не может быть правильным названием (?)
URI Запроса
http://localhost:10013/Call?$select=*&$expand=Phones
РЕАКЦИЯ
{
"error" : {
"code" : "",
"message" : "The query specified in the URI is not valid. Could not find a property named 'Phones' on type 'Call'.",
"innererror" : {
"message" : "Could not find a property named 'Phones' on type 'Call'.",
"type" : "Microsoft.OData.ODataException"
}
}
}
Код
public class CallController : ODataController
{
[EnableQuery]
public IQueryable<Call> GetCall(ODataQueryOptions options)
{
return DatabaseContext.Call.GetAll();
}
}
public class Call
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<Phone> Phones()
{
//just an example
var list = new List<Phone>();
return list as IEnumerable<Phone>
}
}
public class Phone
{
public int Id { get; set; }
public string Name { get; set; }
}
трассировку стека
- Microsoft.OData.UriParser.SelectExpandBinder.GenerateExpandItem (ExpandTermToken tokenIn)
- System.Linq.Enumerable.WhereSelectEnumerableIterator`2. MoveNext()
- System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
- System.Collections.Generic.List 1 коллекция)
- Microsoft.OData.UriParser.SelectExpandBinder.Bind (ExpandToken tokenIn)
- Microsoft.OData .UriParser.SelectExpandSemanticBinder.Bind (oDataPathInfo odataPathInfo, expandToken expandToken, SelectToken selectToken, конфигурация ODataUriParserConfiguration)
- Microsoft.OData.UriParser.ODataQueryOptionParser.ParseSelectAndExpandImplementation (String выберите, String расшириться, конфигурация ODataUriParserConfiguration, oDataPathInfo odataPathInfo) Microsoft.OData.UriParser .ODataQueryOptionParser.Pars eSelectAndExpand()
- System.Web.OData.Query.Validators.SelectExpandQueryValidator.Validate (SelectExpandQueryOption selectExpandQueryOption, ODataValidationSettings ValidationSettings)
- System.Web.OData.Query.SelectExpandQueryOption.Validate (ODataValidationSettings ValidationSettings)
- System.Web .OData.Query.Validators.ODataQueryValidator.Validate (опции ODataQueryOptions, ODataValidationSettings validationSettings)
- System.Web.OData.Query.ODataQueryOptions.Проверка (ODataValidationSettings ValidationSettings)
- System.Web.OData.EnableQueryAttribute.ValidateQuery (HttpRequestMessage запрос, ODataQueryOptions queryOptions)
- System.Web.OData.EnableQueryAttribute.ExecuteQuery (ответ объекта, HttpRequestMessage запрос, HttpActionDescriptor actionDescriptor, ODataQueryContext queryContext)
- System.Web.OData.EnableQueryAttribute.OnActionExecuted (HttpActionExecutedContext actionExecutedContext)
Я понимаю, что будет работать, это возможно сделать это без преобразования? – JacobVoller
Как вам известно, разница в функции и свойства. OData может распознать свойство/атрибут модели, чтобы выставить ее как jone/xml/atom, но с функцией ее не будет. – aniket