【发布时间】:2018-05-05 02:01:15
【问题描述】:
我在 C# 环境中使用 RestSharp API。
我已经成功构建了 1) 返回特定记录和 2) 返回最近 50 条记录的代码。例如,下面的 sn-p 是后者,它工作得很好:
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 说我必须:
- 提供“请求 ID”,以指定我们将更新的记录
- 使用“EDIT_REQUEST”的“操作名称”
-
像这样提供输入数据:
{ “手术”: { “细节”: { “类别”:“硬件”, “主题”:“测试” } }
尝试 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 - prolog 中不允许内容。”
尝试 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 - 您是否尝试过其他格式(注释)?
-
你解决了!你的调查工作给我留下了深刻的印象。 :) 我看到了那个网页,但现在发现我使用了错误的格式。 (用于事件请求而不是服务请求。)