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; } 
} 

棧跟蹤

  1. Microsoft.OData.UriParser.SelectExpandBinder.GenerateExpandItem(ExpandTermToken tokenIn)
  2. System.Linq.Enumerable.WhereSelectEnumerableIterator`2。 MoveNext()
  3. System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
  4. System.Collections.Generic.List 1集合)
  5. Microsoft.OData.UriParser.SelectExpandBinder.Bind(ExpandToken tokenIn)
  6. Microsoft.OData .UriParser.SelectExpandSemanticBinder.Bind(oDataPathInfo odataPathInfo,expandToken expandToken,selectToken selectToken,ODataUriParserConfiguration配置)
  7. Microsoft.OData.UriParser.ODataQueryOptionParser.ParseSelectAndExpandImplementation(串選擇,字符串展開,ODataUriParserConfiguration配置,oDataPathInfo odataPathInfo) Microsoft.OData.UriParser .ODataQueryOptionParser.Pars eSelectAndExpand()
  8. System.Web.OData.Query.Validators.SelectExpandQueryValidator.Validate(SelectExpandQueryOption selectExpandQueryOption,ODataValidationSettings validationSettings)
  9. System.Web.OData.Query.SelectExpandQueryOption.Validate(ODataValidationSettings validationSettings)
  10. 的System.Web .OData.Query.Validators.ODataQueryValidator.Validate(ODataQueryOptions選項,ODataValidationSettings validationSettings)
  11. System.Web.OData.Query.ODataQueryOptions。驗證(ODataValidationSettings validationSettings)
  12. System.Web.OData.EnableQueryAttribute.ValidateQuery(HttpRequestMessage請求,ODataQueryOptions queryOptions)
  13. System.Web.OData.EnableQueryAttribute.ExecuteQuery(對象響應,HttpRequestMessage請求,HttpActionDescriptor actionDescriptor,ODataQueryContext queryContext)
  14. System.Web.OData.EnableQueryAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)

回答

0

你似乎在級呼叫已經創建函數調用手機。請該函數轉換屬性如下:

公共IEnumerable的電話{獲取;集;}

+0

據我所知,會工作,是有可能做到這一點無需轉換呢? – JacobVoller

+0

正如您可能知道的,功能和屬性存在差異。 OData可以識別模型的屬性/屬性作爲json/xml/atom中的響應公開,但是使用函數不會。 – aniket