WCF Web API预览6:没有'MediaTypeFormatter'可用

时间:2011-12-03 13:09:33

标签: wcf wcf-web-api

我正在考虑在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处理?

1 个答案:

答案 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;。