使用 webapi 中的 HttpClient 使用 xml

Posted

技术标签:

【中文标题】使用 webapi 中的 HttpClient 使用 xml【英文标题】:Consuming xml using HttpClient from webapi 【发布时间】:2015-06-29 12:19:30 【问题描述】:

我使用 WebClient 从 restfull 服务 (.net web api) 获取 Xml 对象,一切正常:

using(WebClient client = new WebClient())

   client.Encoding = UTF8Encoding.UTF8;
   client.Headers[HttpRequestHeader.ContentType] = "text/xml";
   client.Credentials = // ....;
   xmlResult = webClient.DownloadString(url);


....

这段代码很好用。我得到一个 Xml 作为字符串返回,每个人都很高兴。

现在,我对其进行了更改,以便它可以与 HttpClient 一起使用,但我无法返回 Xml - 始终将 json 作为字符串。

using(var handler = new HttpClientHandler() Credentials = new NetworkCredentials)
using(var client = new HttpClient(handler))

   var request = new HttpRequestMessage(HttpMethod.Get, url);
   request.Headers.Add(HttpRequestHeader.ContentType.ToString(), "text/xml");
   returnedXml = client.SendAsync(request).Result.Content.ReadAsStringAsync().Result;
   

我做错了什么?如何获得我渴望的 Xml?

谢谢

【问题讨论】:

【参考方案1】:

试试这个..

using(var handler = new HttpClientHandler() Credentials = new NetworkCredentials)
using(var client = new HttpClient(handler))

      client.DefaultRequestHeaders
      .Accept
      .Add(new MediaTypeWithQualityHeaderValue("text/xml"));
   var request = new HttpRequestMessage(HttpMethod.Get, url);
    returnedXml = client.SendAsync(request).Result.Content.ReadAsStringAsync().Result;
  

【讨论】:

【参考方案2】:

想通了!

我应该添加一个 Accept 标头,它的类型应该是“application/xml”。

工作版本:

using(var handler = new HttpClientHandler() Credentials = new NetworkCredentials)
using(var client = new HttpClient(handler))

  var request = new HttpRequestMessage(HttpMethod.Get, url);
  request.Headers.Add(HttpRequestHeader.Accept.ToString(), "application/xml");
  returnedXml = client.SendAsync(request).Result.Content.ReadAsStringAsync().Result;
   

【讨论】:

以上是关于使用 webapi 中的 HttpClient 使用 xml的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient 中的 PostAsync 不会将数据发送到我的 webapi

UWP 应用中的 HttpClient 缓存

从 HttpClient 向 webapi 提交 File 和 Json 数据

UWP应用程序中的HttpClient缓存

单元测试场景中带有asp.net WebApi的HttpClient

使用HttpClient发送数据 到WebApi