0
我正在創建一個新的網絡API實現的OData 4.我希望能夠選擇/擴大導航屬性,但我發現了我,我不」錯誤不知道如何解決。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(串選擇,字符串展開,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可以識別模型的屬性/屬性作爲json/xml/atom中的響應公開,但是使用函數不會。 – aniket