Использование ASP.NET веб-API 2 OData service я предоставил следующую конечную точку:
/entity1('key')/entity2('key')/entity3('key')/entity4('key')
При выполнении /entity1('key')/entity2('key')/entity3?$expand=entity4
я получаю ответ JSON с правильным "@odata.context"
:
"@odata.context": "https://host:port/$metadata#entity1('key')/entity2('ket')/entity3",
"value": [
{
...,
"entity4@odata.context": "https://host:port/$metadata#entity1('key')/entity2('key')/entity3('key')/entity4",
"entity4": [
{
...
}
]
},
...
При выполнении /entity1('key')/entity2('key')/entity3('key')?$expand=entity4
однако, я получаю неправильный "@odata.context"
с двумя ключами:
"@odata.context": "https://host:port/$metadata#entity1('key')/entity2('ket')/entity3",
"value": [
{
...,
"entity4@odata.context": "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."
Ну не шучу. Что могло быть причиной этого?
Обновить
Я зарегистрировал здесь проблему . Посмотрим, что получится.
Я нашел обходной путь:
Использование
$filter
вместо ключа:/entity1('key')/entity2('key')/entity3?$filter=Key eq 'key'&$expand=entity4
обеспечивает правильный ответ: