我在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:
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。虽然这是一个很好的测试,但我觉得这不是正确的方向。
我觉得我真的很亲密......但经过几个小时的研究,我未能解决问题。
答案 0 :(得分:0)
这个实例似乎是使用错误格式的情况。请参阅上面的Caramiriel评论,因为他们应该得到所有的信任。