これは、元のMSDNドキュメントです!明日のために、保持しました。
ウェブAPIコントローラの操作は、次のいずれかを返すことができます。
- 空隙
- HttpResponseMessage
- IHttpActionResult
- 他のタイプ
返されたこのような状況を踏まえ、ウェブAPIは、HTTPレスポンスを作成するために、異なるメカニズムを使用します。
戻り値の型の
応答を作成する方法のWeb API
空隙 | 戻り空の204(コンテンツなし) |
HttpResponseMessage | 直接HTTPの応答メッセージに。 |
IHttpActionResult | コールExecuteAsyncが作成HttpResponseMessageを HTTPレスポンスメッセージに変換し、。 |
他のタイプ | 体に応答して戻り値を書き込みシーケンスは、200(OK)を返します。 |
空隙
戻り型がある場合はvoid
、ウェブAPIは、空のHTTPレスポンスステータスコード204(コンテンツ)を返します。
パブリック クラスValuesController:ApiController { 公共 のボイド・ポスト() { } }
HTTPベース:
HTTP / 1.1 204 コンテンツなし サーバー:マイクロソフト -iis / 8.0 日付:月、27ヤン、2014年 02:13:26 GMT
HttpResponseMessage
操作が返された場合HttpResponseMessageを、APIは、直接HTTP応答メッセージにウェブの値を返し、そして使用されますHttpResponseMessage充填に応答して、オブジェクトのプロパティを。
このオプションは、応答メッセージを制御の多くを提供します。例えば、次のような動作は、コントローラのキャッシュ制御ヘッダを設定します。
パブリック クラスValuesController:ApiController { 公共HttpResponseMessageのGet() { HttpResponseMessage応答 = Request.CreateResponse(HttpStatusCode.OK、" 値" )。 response.Content = 新しい StringContent(" こんにちは" 、Encoding.Unicode)。 response.Headers.CacheControl = 新しいCacheControlHeaderValue() { MaxAgeの = TimeSpan.FromMinutes(20 ) }。 戻り値の応答; } }
回答:
HTTP / 1.1 200 OK キャッシュ -制御:最大エージング= 1200 コンテンツ -length:10 コンテンツ -Type:テキスト/平野。文字セット= UTF- 16 サーバー:マイクロソフト -iis / 8.0 日付:月、27ヤン、2014年 08:53:35 GMT こんにちは
IHttpActionResult
ウェブAPI 2が導入さIHttpActionResultのインターフェイスを。本質的には、それが定義されてHttpResponseMessage工場を。ここにいるIHttpActionResultインターフェースの利点のいくつかを:
- 簡略化されたコントローラユニットテスト。
- 一般的なロジックは別々のクラスにHTTPレスポンスを作成するために使用されます。
- 応答の構造の低レベルの詳細によって隠され、コントローラは、より明確に意図動作します。
IHttpActionResultは、単一のメソッドに含まれていExecuteAsyncを、それは非同期に作成、HttpResponseMessageインスタンスを。
パブリック インターフェイスIHttpActionResult { タスク <HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)。 }
コントローラの操作が返す場合IHttpActionResultを、ウェブAPIは呼び出しますExecuteAsyncの作成する方法HttpResponseMessageを。次いで、HttpResponseMessage HTTPレスポンスメッセージに変換します。
ここでは、テキスト応答を作成しているIHttpActionResult簡単に実現:
パブリック クラステキスト結果:IHttpActionResult { 文字列_value。 HttpRequestMessage _request; 公共 TextResult(文字列値、HttpRequestMessageリクエスト) { _value = 値。 _request = 要求。 } パブリックタスク<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { VaRの応答= 新しいHttpResponseMessage() { コンテンツ = 新しいStringContent(_value)、 要求メッセージ = _request }。 返すTask.FromResult(応答)。 } }
コントローラの動作例:
パブリック クラスValuesController:ApiController { 公共IHttpActionResult取得() { 返す 新しい TextResultを(「こんにちは」、リクエスト)。 } }
回答:
HTTP / 1.1 200 OK コンテンツ -length:5 内容 -Type:テキスト/平野。文字セット= UTF- 8 サーバー:マイクロソフト -iis / 8.0 日付:月、27ヤン、2014年 08:53:35 GMT こんにちは
IHttpActionResultで定義された使用名前空間は、より頻繁に達成しました。 ApiControllerクラスは、操作のこれらのヘルパー構築された結果を返すメソッドを定義します。
要求が既存の製品IDと一致しない場合、次の例では、コントローラは呼ぶApiControllerを 404(見つかりません)レスポンスを作成します。そうでない場合、コントローラは、呼び出しますApiControllerを製品に200(OK)応答を作成しますました。
公共 IHttpActionResult取得(int型のID) { 製品産物 = _repository.Get(ID)。 もし(製品== nullの) { 返す NOTFOUNDを(); //はNotFoundResultを返します } 返す OK(製品を)。 // OkNegotiatedContentResultを返します }
戻り値の他のタイプ
リターンの他のすべてのタイプの場合は、使用してWeb API メディアフォーマッタは、戻り値をシリアル化します。Web APIをシリアル化された値は、体内に応じて書かれています。応答ステータスコード200(正常)です。
パブリック クラスProductsController:ApiController { 公共のIEnumerable <製品> ゲット() { 返すGetAllProductsFromDBを(); } }
この方法の欠点は、あなたが直接など404として、エラーコードを返すことができないということです。しかし、エラーコードを引き出すhttpresponseexceptionとします。詳細については、ウェブAPI例外処理ASP.NETを。
フォーマッタを選択するために、受け入れ要求ヘッダーを使用して、Web API。詳細については、コンテンツネゴシエーションを。
例要求:
GETのhttp:// localhostの/ API /製品はHTTP / 1.1 USER- エージェント:フィドラー ホスト:ローカルホスト:24127 受け入れ:アプリケーション / JSONを
サンプル応答:
HTTP / 1.1 200 OK コンテンツ -タイプ:アプリケーション/ JSON。文字セット= UTF- 8 サーバー:マイクロソフト -iis / 8.0 日付:月、27ヤン、2014年 08:53:35 GMT コンテンツ -length:56 [{ " イド":1、" 名称":" ヨーヨー"、" カテゴリ":" おもちゃ"、" 価格":6.95 }]
一時的な保存は、これはオリジナルのMSDNドキュメントです!