2013-10-21 13 views
11

今後のプロジェクトでは、ASP.NET WebAPI 2を使用して、Webサイトとブラウザクライアントの両方にサービス機能を公開しようとしています。WebAPIプロジェクトのC#HTTPClientラッパーを生成する方法はありますか?

可能な限り「エンドポイント」をできるだけ少なくしたいので、「内部」でもWebAPI Webサービスからサーバーを使用することができます。 (コントローラーのインスタンスを直接作成するだけではなく)

HTTPClientをラップし、厳密に型指定された "プロキシー"を生成するC# "クライアント"を生成またはスキャフォールドするのに役立つものを探しています。 "新しいサービス参照の追加"を介してプロキシを生成する場合のWCFと同様です。

私は同様のことを尋ねる他の質問(HERE参照)を読んだことがありますが、MVCやテストの懸念事項に関連しないより直接的な質問をしたかったのです。

+0

これは私が探していたものの最高の表現は次のとおりです:

はこちらをご覧 http://www.faniereynders.com/2013/03/aspnet-web-api .html これは後で正式な方法で出てくることを願っています... – BoxOfNotGoodery

答えて

9

など、

public static TItem GetItem<TItem>(this HttpClient httpClient, string queryString) where TItem : class 
    { 
     var response = httpClient.GetAsync(queryString).Result; 
     if (response.IsSuccessStatusCode) 
     { 
      return response.Content.ReadAsAsync<TItem>().Result; 
     } 

     throw new HttpRequestException(response.ToString()); 
    } 

ような何かをするために、一般的なヘルパーメソッドを使用しますが、独自のエラー処理に変更することができます私が探していた。

http://reynders.co/2013/03/10/creating-a-proxy-for-aspnet-web-api-t4 http://reynders.co/2014/01/16/introducing-webapiproxy-providing

彼はgithubの上に自分のコード例を置きます

https://github.com/faniereynders/WebAPIProxy

これは後で正式な方法で出現する可能性があります。

1

使いやすいWeb API機能を提供するのが最も一般的な方法は、メインクラスといくつかのポスト機能を定義するアセンブリを持つことです。このアセンブリはJSONを使用してデータを転送します。

PayPalの統合APIがどのように機能するかをご覧ください。基本的には、使用中のさまざまなクラスの定義を含むアセンブリを提供します。データをサーバーに転送するためのクラスがあります。

考えられるのは、クライアントは実際にあなたとコミュニケーションを取っていることに気付かず(ブラックボックスに入っています)、あらかじめ定義されたクラスを使用するか、自分でロールするかを選択できます。

+0

私は、さまざまなサービスの相対的なurisと対応するメソッドとの間のマッピングが主な関心事だと考えています。そのため、urisを受け入れるメソッドの一般的なセットではなく、単一のメソッドが単一のAPI呼び出しに対応する場合、問題は、これが可能かどうかではなく、明らかに、このようなラッピングAPIは手作業で簡単に作成できますが、既存の手法を使用して自動的に生成する方法です。 –

1

私はあなたが実際にデータにアクセスするために完全なライブラリを必要としないと思います。あなたは、あなたのデータオブジェクトは、共通のライブラリで定義されている場合は、これが最良の表現です

3

私は現在、.NET用のオープンソースのSwaggerツールチェーンに取り組んでいます。これらのツールを使用すると、既存のDLLからWeb APIコントローラーを選択し、C#およびTypeScriptのSwagger仕様またはクライアントコードを生成できます。 Visual StudioでT4テンプレートを使用すると、生成プロセスはWCFサービス参照のように機能します。 http://NSwag.org

enter image description here

+0

これは面白そうです。 VBのサポートを追加するのはどれくらい難しいでしょうか? – InteXX

+0

この機能は計画されていませんが、C#をvb.netに変換するツールがあります –

+0

Roslynの登場により、このようなステップを自動化することさえ可能だと思います。あなたがここで構築した良いユーティリティのように見えます。良い仕事を続けてください。 – InteXX

関連する問題