通过REST服务更新记录

时间:2018-05-04 17:15:09

标签: c# rest restsharp

我在C#环境中使用RestSharp API。

我已经成功构建了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. 提供“请求ID”,以指定我们将要更新的记录
  2. 使用“EDIT_REQUEST”
  3. 的“操作名称”
  4. 提供如下输入数据:

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

  5. 尝试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";
    

    我尝试了一些不同网址的组合,但是它返回错误"Error when validating URL - Invalid URL for the requested operation."此外,我必须使用的浏览器中的示例不需要使用花哨的URL。虽然这是一个很好的测试,但我觉得这不是正确的方向。

    我觉得我真的很亲密......但经过几个小时的研究,我未能解决问题。

1 个答案:

答案 0 :(得分:0)

这个实例似乎是使用错误格式的情况。请参阅上面的Caramiriel评论,因为他们应该得到所有的信任。