2013-09-27 8 views
5

Web APIコントローラでメソッドの成功戻りコードを指定する方法はありますか?成功コードを制御するASP.NET Web API(200対201)

私の最初のコントローラは、しかし、あなたは、Web APIのヘルプページを生成する上記の方法の欠点があり

public HttpResponseMessage PostProduct(string id, Product product) 
{ 
var product= service.CreateProduct(product); 
return Request.CreateResponse(HttpStatusCode.Created, product); 
} 

下回るような構造にされました。 Web APIヘルプページAPIは、厳密に型指定されたプロダクトがレスポンスであることを自動的にデコードできないため、そのドキュメンテーションにサンプルレスポンスオブジェクトを生成します。

私は以下のアプローチに進みますが、ここでは成功コードはOK (200)であり、Created (201)ではありません。とにかく、私はいくつかの属性スタイル構文を使ってメソッドの成功コードを制御できますか?さらに、Locationヘッダを、作成されたリソースが利用可能なURLに設定したいと思います。再度、私がHttpResponseMesageを扱っていたときは簡単でした。

下記のお観測について
public Product PostProduct(string id, Product product) 
{ 
var product= service.CreateProduct(product); 
return product; 
} 

答えて

3

However, there is drawback to the above approach when you generate Web API help pages. The Web API Help page API cannot automatically decode that the strongly typed Product is the response and hence generate a sample response object in its documentation.

あなたはHelpPageパッケージとともにインストールされるHelpPageConfig.csファイルを見てみることができます。これには、あなたのようなシナリオのための例があり、実際の応答のタイプを設定することができます。

Web APIの最新バージョン(現在は5.0)では、ResponseTypeという属性を導入しました。これを使用して、実際のタイプのアクションをデコレートできます。この属性はシナリオで使用できます。

+0

ありがとうございました。他の場所に同じマッピングを書いていなくても、属性ルーティングと一緒にそれを飾るのはいいでしょう。次のリリースでのリリースを知ってうれしいです。 – govin

+0

今後のWeb APIのリリースでは、SuccessResponseTypeとErrorResponseTypeの可能性のあるステータスコードのリストを指定するための規定もありますので、APIドキュメントでも同様に取り上げることができます。 – govin

1

私はこれを行う:あなたはあなたが期待したものを取得していない場合は

[HttpGet] 
public MyObject MyMethod() 
{ 
    try 
    { 
     return mysService.GetMyObject() 
    } 
    catch (SomeException) 
    { 
     throw new HttpResponseException(
      new HttpResponseMessage(HttpStatusCode.BadRequest) 
       { 
        Content = 
         new StringContent("Something went wrong.") 
       }); 
    } 
} 

は、HttpResponseExceptionを投げます。

関連する問題