2016-12-29 26 views
0

使用我暴露了一個ASP.NET Web API 2 OData服務的以下端點:

/entity1('key')/entity2('key')/entity3('key')/entity4('key') 

當我執行/entity1('key')/entity2('key')/entity3?$expand=entity4我收到與正確"@odata.context" JSON響應:

"@odata.context": "https://host:port/$metadata#entity1('key')/entity2('ket')/entity3", 
"value": [ 
{ 
    ..., 
    "[email protected]": "https://host:port/$metadata#entity1('key')/entity2('key')/entity3('key')/entity4", 
    "entity4": [ 
    { 
     ... 
    } 
    ] 
}, 
... 

當我執行/entity1('key')/entity2('key')/entity3('key')?$expand=entity4然而,我收到一個不正確"@odata.context"用叔WO鍵:

"@odata.context": "https://host:port/$metadata#entity1('key')/entity2('ket')/entity3", 
"value": [ 
{ 
    ..., 
    "[email protected]": "https://host:port/$metadata#entity1('key')/entity2('key')/entity3('key')('key')/entity4", 
    "entity4": [ 
    { 
     ... 
    } 
    ] 
} 

這會導致微軟的OData客戶端運行時異常:

"The context URL 'https://host:port/$metadata#entity1('key')/entity2('key')/entity3('key')('key')/entity4' is invalid."

哦,不開玩笑。什麼可能導致這個?

更新

我登錄的問題here。我們將看到會發生什麼。

回答

0

我已經找到了解決辦法:

使用$filter,而不是一個關鍵:/entity1('key')/entity2('key')/entity3?$filter=Key eq 'key'&$expand=entity4提供正確的響應:

"@odata.context": "https://host:port/$metadata#entity1('key')/entity2('ket')/entity3", 
"value": [ 
{ 
    ..., 
    "[email protected]": "https://host:port/$metadata#entity1('key')/entity2('key')/entity3('key')/entity4" , 
    "entity4": [ 
    { 
     ... 
    } 
    ] 
}