OData $expand содержит неверную контекстную ссылку

Использование 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."

Ну не шучу. Что могло быть причиной этого?

Обновить

Я зарегистрировал здесь проблему . Посмотрим, что получится.

1 ответ

  1. Я нашел обходной путь:

    Использование $filterвместо ключа: /entity1('key')/entity2('key')/entity3?$filter=Key eq 'key'&$expand=entity4обеспечивает правильный ответ:

    "@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": [
        {
          ...
        }
      ]
    }