Обновление записи через службу REST

Я использую RestSharp API в среде C#.

Я успешно создал код, который 1) возвращает конкретную запись и 2) возвращает последние 50 записей. В качестве примера приведенный ниже фрагмент является последним, который отлично работает:

RestRequest request = new RestRequest();
request.Resource = "/sdpapi/request";
request.AddParameter("OPERATION_NAME", "GET_REQUESTS");

request.AddParameter("INPUT_DATA", @"<operation>
<details>
    <from>0</from>
    <limit>50</limit>
    <filterby>All_Requests</filterby>
</details>
</operation>");

Я бы хотел обновить одну запись на сервере. API сервера говорит, что я должен:

  1. Укажите «идентификатор запроса», чтобы указать, какую запись мы будем обновлять.
  2. Используйте "название операции" EDIT_REQUEST.
  3. Предоставьте входные данные следующим образом:

    { "операция": { "подробности": { «категория»: «оборудование», "subject": "test" } }

Попытка 1:

RestRequest request = new RestRequest();
request.Resource = "/sdpapi/request/{request_id}";
request.AddParameter("request_id", id, ParameterType.UrlSegment);
request.AddParameter("OPERATION_NAME", "EDIT_REQUEST");
request.AddParameter("INPUT_DATA", @"<operation>
<details>
    <subject>test</subject>
    <category>hardware</category>
</details>
</operation>");

В ответ приходит сообщение о том, что соединение было успешным. Сервер показывает успешную попытку обновления, но на самом деле никаких изменений не происходит. Он как будто слышит мой запрос, думает, что я обновляю 0 переменных.

Попытка 2:

Возможно, он ожидает, что входные данные будут в формате JSON.

RestRequest request = new RestRequest();
request.Resource = "/sdpapi/request/{request_id}";
request.AddParameter("request_id", id, ParameterType.UrlSegment);
request.AddParameter("OPERATION_NAME", "EDIT_REQUEST");
request.AddParameter("INPUT_DATA", @"{
    ""operation"": {
        ""details"": {
            ""category"": ""hardware"",
            ""subject"": ""test""
    }
}");

Это не работает. Он возвращается со словами: «Ошибка при выполнении - EDIT_REQUEST - Содержимое не разрешено в прологе».

Попытка 3:

Я пытаюсь добавить параметры обновления с помощью метода AddParameter ().

RestRequest request = new RestRequest();
request.Resource = "/sdpapi/request/{request_id}";
request.AddParameter("request_id", id, ParameterType.UrlSegment);
request.AddParameter("OPERATION_NAME", "EDIT_REQUEST");
request.AddParameter("CATEGORY", "hardware");
request.AddParameter("SUBJECT", "test");

Возвращает ошибку «Ошибка при разборе входных XML-элементов - null - null».

Попытка 4:

Предложение, которое я видел в Интернете, указать тип контента и сериализовать мой собственный JSON.

RestRequest request = new RestRequest();
request.AddHeader("Content-type", "application/json");
request.RequestFormat = DataFormat.Json;
request.AddBody(new { category = "hardware", subject = "test" }); 
request.Resource = "/sdpapi/request/{request_id}";
request.AddParameter("request_id", id, ParameterType.UrlSegment);
request.AddParameter("OPERATION_NAME", "EDIT_REQUEST");

Возвращает ошибку "Error when parsing input XML elements - null - null".

Попытка 5:

request.Method = Method.PATCH;

Я пробовал различные комбинации с помощью Method.PATCH, но он возвращает ошибку "The server does not support the functionality needed to fulfill this request (Method PATCH is not implemented by this servlet for this URI)."

Попытка 6:

request.Resource = "/sdpapi/request/{request_id}/category/hardware";

Я пробовал несколько комбинаций разных URL-адресов, однако он возвращает ошибку "Error when validating URL - Invalid URL for the requested operation.". Кроме того, в примере в браузере, с которым мне приходится работать, не требуется использовать причудливый URL-адрес. Хотя это был хороший тест, я чувствую, что это неправильное направление.


Я чувствую, что я действительно близок ... но после нескольких часов исследований мне не удалось решить эту проблему.

Я понятия не имею, какой продукт вы используете, но он выглядит так: help.servicedeskplus.com/api/request-operations.html$edit - Вы пробовали другой формат (примечание)?

Caramiriel 04.05.2018 19:29

Вы это решили! Я впечатлен вашей следственной работой. :) Я видел эту веб-страницу, но только сейчас обнаружил, что использую неправильный формат. (Используется для запроса инцидента вместо запроса на обслуживание.)

GrassProgrammer 04.05.2018 19:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
361
1

Ответы 1

Похоже, в этом случае использовался неправильный формат. См. Комментарий Карамириэля выше, поскольку они заслуживают всяческих похвал.

Другие вопросы по теме