Я использую 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 сервера говорит, что я должен:
Предоставьте входные данные следующим образом:
{ "операция": { "подробности": { «категория»: «оборудование», "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 - Вы пробовали другой формат (примечание)?