2011-12-03 18 views
2

WCF Web APIプレビュー6でHttpClientを使用して、サードパーティのサービスを利用しています。このサードパーティサービスは、XML形式のデータを受け入れて返します。 HTTPレスポンスのContent-Typeヘッダーはtext/plainに設定されています。 Response-Content-Typeをtext/plainに設定すると問題が発生しているようです。次のように私は、サービスへの要求を作ってるんだ:WCF Web APIプレビュー6:いいえ 'MediaTypeFormatter'が利用可能です

フィドラーを使用して
Task<HttpResponseMessage> result = client.PostAsync(apiEndpoint, new ObjectContent(typeof (LeaveAccrualRequest), request)); 

、私は、要求がサービスにアクセスして、適切な、期待される応答が戻ってきて見ることができます。しかし、私が応答にアクセスしようとすると、次のようなInvalidOperationExceptionが発生します。

メディアタイプ 'text/plain'のタイプ 'LeaveAccrualResponse'のオブジェクトを読み取るための 'MediaTypeFormatter'はありません。

HTTPレスポンスでtext/plainと指定しても、application/xmlとして処理する必要があることをHttpClientに伝える方法はありますか?

+0

[返信](http://stackoverflow.com/questions/6803264/c-sharp-wcf-web-api-jsonp/8990334#8990334) –

答えて

1

あなたはXmlMediaTypeFormatterから派生して、「text/plainの」ヘッダを追加できます。それは「text/plainで追加する前に、他のすべてのサポートされているメディアタイプを削除することに意味を作ることができ、あなたの要件に応じて

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

を:

SupportedMediaTypes.Clear(); 

[更新]

アクセスご要望内容とReadAsAsync <T>を使用IEnumerableを受け入れるメソッドのオーバーレイ。<MediaTypeFormatter>。

+0

回答ありがとう!あなたが提案したように、派生クラスを追加しました。私の要求を次のようにしています: PlainTextXmlFormatter formatter = new PlainTextXmlFormatter(); MediaTypeFormatterCollectionフォーマッタ= new MediaTypeFormatterCollection {フォーマッタ}; タスク result = client.PostAsync(apiEndpoint、new ObjectContent(typeof(LeaveAccrualRequest)、request、formatsters)); 引き続き同じエラーが表示されます。他のサポートされているメディアタイプをすべて削除しようとしましたが、それは役に立たなかった –

+0

私の回答を更新しました –

+0

あなたの更新された提案を試しても、同じエラーが表示されます。 –

関連する問題