ウェブAPIオペレーション2件の結果

これは、元のMSDNドキュメントです!スマイルウィンク明日のために、保持しました。

 

ウェブAPIコントローラの操作は、次のいずれかを返すことができます。

  1. 空隙
  2. HttpResponseMessage
  3. IHttpActionResult
  4. 他のタイプ

 

返されたこのような状況を踏まえ、ウェブ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年 021326 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年 085335 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年 085335 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年 085335 GMT
コンテンツ -length:56

[{ " イド"1" 名称"" ヨーヨー"" カテゴリ"" おもちゃ"" 価格"6.95 }]

 

一時的な保存は、これはオリジナルのMSDNドキュメントです!

おすすめ

転載: www.cnblogs.com/buyixiaohan/p/11802519.html