使用 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
从 HttpClient 向 webapi 提交 File 和 Json 数据