【问题标题】:Updating record via REST service通过 REST 服务更新记录
【发布时间】: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 说我必须:

  1. 提供“请求 ID”,以指定我们将更新的记录
  2. 使用“EDIT_REQUEST”的“操作名称”
  3. 像这样提供输入数据:

    { “手术”: { “细节”: { “类别”:“硬件”, “主题”:“测试” } }

尝试 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 - 您是否尝试过其他格式(注释)?
  • 你解决了!你的调查工作给我留下了深刻的印象。 :) 我看到了那个网页,但现在发现我使用了错误的格式。 (用于事件请求而不是服务请求。)

标签: c# rest restsharp


【解决方案1】:

看来这个实例是使用错误格式的情况。请参阅上面 Caramiriel 的评论,因为他们值得称赞。

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多