Ссылки на OData в наборе изменений - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть пакетный запрос на обновление данных. Данные:

Item : {   
 id : int,   
 name : string,    
 RefItem : {
    int : id,
    name : string   }
}

мне нужно

  1. Создать предмет
  2. Обновить ссылку RefItem для этого вновь созданного элемента в том же пакете. (Предположим, что RefItems (1) уже существует в наборе данных)

Согласно спецификации OData:

</p> <p>--batch_1872-f36a-7ce8</p> <p>Content-Type: multipart/mixed; boundary=changeset_8c16-9ba3-2260</p> <p>--changeset_8c16-9ba3-2260</p> <p>Content-Type: application/http</p> <p>Content-Transfer-Encoding: binary</p> <p>PUT $1/$links/ItemRef HTTP/1.1</p> <p>Content-ID: 2</p> <p>Accept: application/atomsvc+xml;q=0.8, application/json;q=0.5, <em>/</em>;q=0.1</p> <p>DataServiceVersion: 1.0</p> <p>Content-Type: application/json</p> <p>{"uri":"ItemRefs(1)"}</p> <p>--changeset_8c16-9ba3-2260</p> <p>Content-Type: application/http</p> <p>Content-Transfer-Encoding: binary</p> <p>POST Products HTTP/1.1</p> <p>Content-ID: 1</p> <p>Accept: application/atomsvc+xml;q=0.8, application/json;q=0.5, <em>/</em>;q=0.1</p> <p>DataServiceVersion: 1.0</p> <p>Content-Type: application/json</p> <p>{"id":-1,"name":"seven"}</p> <p>--changeset_8c16-9ba3-2260--</p> <p>--batch_1872-f36a-7ce8--</p> <p>

Полагаю, это должно работать, но у меня ошибка ответа:

</p> <p>--batchresponse_4febeba8-dd43-4040-9fdb-866afde5304e Content-Type: multipart/mixed; boundary=changesetresponse_424dbf12-fa9a-4a59-8284-963fa0fa7b77</p> <p>--changesetresponse_424dbf12-fa9a-4a59-8284-963fa0fa7b77 Content-Type: application/http Content-Transfer-Encoding: binary</p> <p>HTTP/1.1 500 Internal Server Error Content-ID: 2 X-Content-Type-Options: nosniff DataServiceVersion: 1.0; Content-Type: application/json;charset=utf-8</p> <p>{"d":{"error":{"code":"","message":{"lang":"ru-RU","value":"An error occurred while processing this request."}}}} --changesetresponse_424dbf12-fa9a-4a59-...

Может кто-нибудь сказать мне, где я не прав? Спасибо.

1 Ответ

0 голосов
/ 03 апреля 2012

Пакетный запрос обрабатывается как поток. Таким образом, вы можете ссылаться только на идентификатор контента, который уже был просмотрен. Приведенный выше пример относится к идентификатору содержимого 1 до операции запроса с этим идентификатором содержимого. Это недействительно.

Сначала необходимо создать новый экземпляр (POST), а затем добавить ссылку на него через URL-адрес $ links.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...