c# - HttpClient PutAsync 使用 RestAPI 更新字段

标签 c# asp.net linq api asp.net-web-api

我们有一个第三方 API,它同时具有 GET 和 PUT 方法。第三方 API 返回响应并仅接受 XML 格式。该 API 类似于 https://bh.org/api/v2/prj/A152 以及它返回的 GET

<prj:prj uri="https://bh.org/api/v2/prj/V51" lid="V51" xmlns:udf="http://ge.com/ri/userdefined" xmlns:ri="http://ge.com/ri" xmlns:file="http://ge.com/ri/file" xmlns:prj="http://ge.com/ri/prj">
<name>fgfgfg</name>
<res uri="https://bh.org/api/v2/res/19"/>
<udf:type name="cis"/>
<udf:field type="String" name="ST">Cli</udf:field>
<udf:field type="String" name="CPN">TestName</udf:field>
<udf:field type="Numeric" name="No">1</udf:field>
<udf:field type="String" name="CA">Do not know</udf:field>
<udf:field type="String" name="Cto">Me</udf:field>
<udf:field type="String" name="Site">GT</udf:field>
</prj:prj>

我需要使用第三方 API 中的 put 方法将此处的名称从 ad-93 更改为 ABCD。我创建了应用程序,我们使用 GET 方法调用第三方 API 来获取响应

 using (var client_Name = new HttpClient())
 {
  ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
  Uri uri = new Uri(BaseURL_C);
  client_Name.BaseAddress = uri;
  client_Name.DefaultRequestHeaders.Accept.Clear();
  client_Name.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
  client_Name.DefaultRequestHeaders.Authorization = new   System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray_C));

  string c_URL = BaseURL_C + "api/v2/prj/" + Name;
  var response_LabURL = client_Name.GetAsync(c_URL).Result;
  string responseString_URL = response_LabURL.Content.ReadAsStringAsync().Result;
  XDocument new_doc = XDocument.Parse(responseString_URL);
  new_doc.Descendants("name").FirstOrDefault().Value = serviceResponse;

使用上面的代码,我可以更改作为响应检索的 XDocument 中的名称值。现在我尝试将 XDocument 作为参数传递给 putAsync,以使用 Rest API 更新字段。

 using (var putClient = new HttpClient())
 {
 var requestUrl = string c_URL = BaseURL_C + "api/v2/prj/" + Name;;
 using (HttpContent httpContent = new XDocument(new_doc))
  {
    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
    HttpResponseMessage response = httpClient.PutAsync(requestUrl, httpContent).Result;
  }

但是上面的代码会抛出错误,例如无法将类型“System.Xml.Linq.XDocument”隐式转换为“System.Net.Http.HttpContent”

我不知道如何将 XDocument new_doc 转换为 HtppContent 以便将它们作为参数传递。

最佳答案

你必须像这样使用它

HttpContent httpContent = new StringContent(new_doc.ToString(), Encoding.UTF8, "application/xml");

并删除该行

httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/xml");

关于c# - HttpClient PutAsync 使用 RestAPI 更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477011/

相关文章:

c# - ASP.NET 菜单控件在回发后更改位置

c# - 如何创建已在后端 HTML 表和 ASP.NET 中的 div 中创建的 onserverclick 事件

c# - 如何正确关联启动另一个 Controller 传奇的多个实例的 Controller 传奇?

asp.net mvc 异常跟踪

linq - LINQ 表达式中的值是通过引用传递的吗?

c# - Except 与 Distinct 具有相似的效果?

c# - 线程安全的StreamWriter C#怎么做呢? 1个

c# - 发布 Visual Studio 2013 之前的 ASP.NET MSBuild 自定义任务

mysql - 选择查询中的逻辑错误

c# - 按子列表属性排序父对象列表