我正在考虑在WCF Web API Preview 6中使用HttpClient来使用第三方服务。此第三方服务接受并返回XML格式的数据。他们的HTTP响应将Content-Type标头设置为text / plain。将响应Content-Type设置为text / plain似乎会导致问题。我正在按如下方式向服务提出请求:
Task<HttpResponseMessage> result = client.PostAsync(apiEndpoint, new ObjectContent(typeof (LeaveAccrualRequest), request));
使用Fiddler,我可以看到请求转到服务,并返回适当的预期响应。但是,当我尝试访问响应时,我最终得到以下InvalidOperationException:
没有'MediaTypeFormatter'可用于读取媒体类型为'text / plain'的'LeaveAccrualResponse'类型的对象。
有没有办法告诉HttpClient即使HTTP响应说内容类型是text / plain,它应该将它作为application / xml处理?
答案 0 :(得分:1)
您可以从XmlMediaTypeFormatter派生并添加“text / plain”标题:
public class TextPlainXmlMediaTypeFormatter : XmlMediaTypeFormatter {
public TextPlainXmlMediaTypeFormatter() {
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
}
}
根据您的要求,在添加“text / plain:
之前删除所有其他支持的媒体类型是有意义的SupportedMediaTypes.Clear();
[更新]
访问您的请求内容并使用ReadAsAsync&lt; T&gt;方法overlaod接受IEnumerable&lt; MediaTypeFormatter&gt;。