2013-05-31 20 views
17

私はしばらくの間これを疑問に思っていましたが、それはいつもより良いですHttpResponseMessage web asp.net mvc web apiを使用していますか?私は、彼らがサンプルコントローラWeb Apiで常にHttpResponseMessageを返す方が良いですか?

// GET api/values 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 

     // GET api/values/5 
     public string Get(int id) 
     { 
      return "value"; 
     } 

でそれを使用していない参照してください。デフォルトのWEBAPIプロジェクトをロードすると

私はHttpResponseMessageは周りのすべてをラップし、それは良いのHttp要求を行うと思いました。これが正しければ、それを使用するだけでなく、何のメリットがありますか?

+1

これは多くの作業です。 – SLaks

+0

Request.CreateResponse(HttpStatusCode.OK、 "value")という余分な行のために; ??? – chobo2

+4

正確に。 HTTPレスポンスをカスタマイズする必要がない場合は、質問のサンプルのような簡単なコードを使用する方がいいです。 – SLaks

答えて

17

私はいつもHttpResponseMessageを返します。 Web APIのポイントは、HTTP APIを公開できることです。あなたがオブジェクトを返しているのをふりかえり、オブジェクトをHTTPResponseMessageに変換するためにフレームワークパイプラインに頼っているのは、意図IMOを隠すだけです。

あなた自身でHttpResponseMessageを作成するための追加費用を支払うと、Web APIが実際にどのように機能するかを理解することができます。 Web APIが期待していなかったことを回避する可能性がより高いため、問題は少なくなります。ヘッダーがアクセスできるため、HTTP機能を利用する可能性が高くなります。

+0

同じ私はいつもHttpResponseMessageを返すだけですが、他の人が私が読んで覚えているものとして、なぜヘッダーやものをすべて使って有効なHTTPリクエストを作成するのかと不思議に思っていました。 – chobo2

+0

@ chobo2しかし、httpヘッダーに直接影響する方法はありません。ヘッダーに触れたいシナリオに対しては、ActionFilterを作成する必要があります。 –

+1

これもお勧めします。私たちは約8ヶ月前にフレームワークを使い始めました.HttpResponseMessageのほうがはるかに優れていました。たとえば(他の理由のなかでも)、レスポンスに「ReasonPhrase」を指定することができるため、「BadRequest」を返した方がより正確です。 –

3

サービス層(クラスライブラリの強力な型付きメソッド)とWebサービスレイヤ(ASP.NET WEB API)を持たない理由を分けるため。
サービス層は、Winform、WPF、Console、およびHttp依存関係のないテストプロジェクトで簡単に使用できます。また、モバイルアプリケーションやJavaScriptなどのASPNET WebAPiによってWebサービスとして公開することもできます。
ウェブサービス層の関心事は、HTTPの懸念事項(ヘッダー、コンテンツタイプ、httpステータス..)を持つサービスレイヤを公開し、HttpResponseMessageを返すことです。
これはまた、コントローラーを本当に薄くして、DIでサービスを注入することができます

関連する問題