2016-03-26 11 views
2

単一の整数を返すだけのWeb API RESTサービスを呼び出すための「正しい」方法は何ですか?単一の整数のWeb APIレスポンスタイプ

私はXML、JSON、または他の何ものに関してもここに要件はありません。サービスを呼び出すだけで整数を返す必要があります。

ここではResponseType属性を使用しますか?

私はHttpResponseMessageというサービスの戻り値の型を持っています.JSONを返す何かのサービスでは、これのContentプロパティをUTF8 "application/json"のStringContentに設定します。

しかし、単一の整数には何が正しいのですか?

+0

単一の数字も[valid JSON](http://json.org/)なので、数字を返すだけでJSONとして扱うことができます。または、おそらく 'Result'プロパティを使ってオブジェクトにラップしてください。 – poke

+0

私はちょうどそれを行うかもしれません。ここで厳密な実装要件がない場合、30秒で完了させることができます。このプロジェクトでJSONを返す他のWeb API RESTメソッドがあります。 – Patrick

答えて

5

私はあなたのAPIメソッドのためIHttpActionResultタイプを使用することをお勧めします。一般的な回答を返すために、いくつかの便利な方法を使用することができます。あなたのケースではそれだけで次のようになります。

public IHttpActionResult GetInteger() { 
    // Ok is a convenience method for returning a 200 Ok response 
    return Ok(1); 
} 

たり、返却したい場合には、匿名オブジェクトが細かい簡単にJSONの消費のためにオブジェクトにラップ:

public IHttpActionResult GetInteger() { 
    // Ok is a convenience method for returning a 200 Ok response 
    return Ok(new { 
     value = 1 
    }); 
} 

Documentation here

ドキュメントから要約すると、IHttpActionResultを使用する理由がいくつかあります。

  • コントローラのユニットテストを簡略化します。
  • HTTP応答を作成するための共通ロジックを別々のクラスに移動します。
  • 応答を構成するための低レベルの詳細を隠すことによって、コントローラの動作の意図をより明確にします。
  • +0

    ありがとう、私はIHttpActionResultを調べます。 Web APIには多種多様なコードサンプルがありますが、一般的なことはHttpResponseMessageを返すようです。私はこのためのベストプラクティスに行く必要があります。私はこの記事を読んで、 "あなたが上記の記事を読んだと仮定して、IHttpActionResultを使うことをお勧めします。" ... http://thuru.net/2015/02/20/httpresponsemessage-vs-ihttpactionresult/ – Patrick

    +0

    IHttpActionResult応答を手動で作成する必要がある場合は、ResponseMessageResultを使用してIHttpActionResultを返しながら、これを行うことができます。詳細はこちらhttps://msdn.microsoft.com/en-us/library/system.web.http.results.aspx –

    +0

    JSONを返す既存のメソッドをIHttpActionResultを使用するように変換したい。このようなものをどのように変換しますか? 'Request.CreateResponse(HttpStatusCode.OK、new {User = person}));'?私は 'return Json(result);があり、' HTTP 200 OK'となっていることがわかります。これは正しい方法ですか? – Patrick

    1

    HttpContentクラスから派生した独自のコンテンツタイプを実装することができます。このコンテンツタイプはabstractとマークされています。

    StringContentは、ByteArrayContentから継承して間接的に派生しています。

    一般的には、お客様のintの実際の「意味」に依存します。これが何らかの識別子であれば、それを何らかの種類のオブジェクトにラップします。

    +0

    これは単にバイナリツリーの深さです。したがってツリーの最下位ノードがレベル61にある場合、私は61を返す必要があります。 – Patrick

    +1

    @パトリック私の知る限り、WebAPIには現在IntResponseはありません。あなたが 'int'の特別な扱いを気にしているなら、あなたは私のアドバイスを使うことができます、他の良いオプションが既に導入されています。 – Kamo

    2

    まあ、あなたがどのように応答するようにしたいのかに応じて。ちょうど数:数を含む

    return Request.CreateResponse(HttpStatusCode.OK, "1"); 
    

    A JSONオブジェクト:

    var myNumber = new 
    { 
        theNumber = 1 
    }; 
    return Request.CreateResponse(HttpStatusCode.OK, myNumber); 
    
    関連する問題