2

I'm looking at using HttpClient in WCF Web API Preview 6 to consume a third party service. This third party service accepts and returns XML formatted data. Their HTTP responses have the Content-Type header set to text/plain. It appears that having the response Content-Type set to text/plain is causing problems. I'm making the request to the service as follows:

Task<HttpResponseMessage> result = client.PostAsync(apiEndpoint, new ObjectContent(typeof (LeaveAccrualRequest), request));

Using Fiddler, I can see the request go to the service and an appropriate, expected response come back. However when I try to access the response, I end up with the following InvalidOperationException:

No 'MediaTypeFormatter' is available to read an object of type 'LeaveAccrualResponse' with the media type 'text/plain'.

Is there a way to tell HttpClient that even though the HTTP response says the content type is text/plain, it should handle it as application/xml?

chris.house.00
  • 3,273
  • 1
  • 27
  • 36

1 Answers1

1

You could derive from XmlMediaTypeFormatter and add your "text/plain" header:

public class TextPlainXmlMediaTypeFormatter : XmlMediaTypeFormatter {
    public TextPlainXmlMediaTypeFormatter() {
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
    }
}

Depending on your requirements it could make sense to remove all other supported media types before adding "text/plain:

SupportedMediaTypes.Clear();

[Update]

Access your requests Content and use the ReadAsAsync<T> method overlaod which accepts an IEnumerable<MediaTypeFormatter>.

Alexander Zeitler
  • 11,919
  • 11
  • 81
  • 124
  • Thanks for the response! I added a derived class as you suggested and am now making my request like so: PlainTextXmlFormatter formatter = new PlainTextXmlFormatter(); MediaTypeFormatterCollection formatters = new MediaTypeFormatterCollection{formatter}; Task result = client.PostAsync(apiEndpoint, new ObjectContent(typeof (LeaveAccrualRequest), request, formatters)); Still seeing the same error. I've also tried removing all other supported media types but that didn't help – chris.house.00 Dec 03 '11 at 15:16
  • Sorry, my suggestion had been on server side. Updated my answer. – Alexander Zeitler Dec 04 '11 at 13:02