2012-09-24 2 views
32

Getリクエストの1つで、いくつかのコンテンツを含むHttpResponseMessageを返したいとします。現在、私は次のように働いている:私は、静的な要求を使用していますので、これはテストには本当に困難になるWeb API:HttpResponseMessageのコンテンツ

var header = new MediaTypeHeaderValue("text/xml"); 
Request.CreateResponse(HttpStatusCode.OK, myObject, header); 

。私が読んだものから、私は、次の操作を行うことができる必要があります:

return new HttpResponseMessage<T>(objectInstance); 

をただし、これを行うことができないように見えます。 WebApi/.NETの古いバージョンを使用しているからですか?サイドノートでは


、私は次のようにあなたが潜在的に応答を作成することが分かっ:

var response = new HttpResponseMessage(); 
response.Content = new ObjectContent(typeof(T), objectInstance, mediaTypeFormatter); 

私を困惑私はここにmediaTypeFormatterを追加する必要がない理由です。私はglobal.asaxレベルでメディアタイプフォーマッタを追加しました。

ありがとうございます!

+0

あなたがそうObjectContentテスト難しくなるだろう世界的なコレクションを、アクセスするための静的メンバを使用する必要がありますので、フォーマッタを渡す必要がコンテントネゴシエーションについての詳細を読むことができます。 –

+0

要求は静的ではなく、ApiControllerのインスタンスメンバーです。 –

答えて

60

HttpResponseMessage<T>がベータ後に削除されました。今、代わりに私たちはObjectContent

を入力した型付けHttpResponseMessageの手動そのデフォルトパラメータなしのコンストラクタを使用してHttpResponseMessageを作成する場合は、コンテンツネゴシエーションを実行するために利用可能なリクエストコンテキストが存在しない - それはあなたがフォーマッタを指定する必要が理由です、または実行手作業によるコンテンツ交渉要求に対して実行コンテンツネゴシエーションに依存する応答メッセージを作成します

HttpResponseMessage response = Request.CreateResponse<MyObject>(HttpStatusCode.OK, objInstance); 

:ので、代わりにこれを使用する - 私はあなたがそれを行うにはしたくない理解

最後に、あなたはここでOn this link

+4

私はHttpResponseMessage が間違っています。もっと良いAPIだと思いますが、Request.CreateResponse がうまく動作します。 – Hugo

+3

'HttpResponseMessage'を使用するコントローラメソッドは単体テストするのが非常に難しいので、できるだけ使用しないことをお勧めします。 –

+7

@RoyDictusユニットテストがなぜ難しいのか不思議ですが、詳細を教えてください。 –

関連する問題