2016-08-25 3 views
-1

私のC#アプリケーションでは、2つの異なる部分が必要です:
1)HttpClientをラップするクラスライブラリはURIなどのパラメータとJSONオブジェクトをとります掲示、およびHttpClientをのインスタンス上のPOSTメソッド呼び出し:クラスライブラリとしてラップされたHttpClientを正しく使用する方法

static async Task CreateCustomer() 
     { 
      using (var client = new HttpClient()) 
      { 
       client.BaseAddress = new Uri("http://10.211.55.2:8080/"); 
       client.DefaultRequestHeaders.Accept.Clear(); 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
       client.DefaultRequestHeaders.Add("Accept", "application/json"); 

       var customer = new Customer() { Name = "Gizmo", Address = "123 Widget lane" }; 
       var response = await client.PostAsJsonAsync("/api/customer", customer); 
       var p = response; 
      } 
     } 

2)このクラスライブラリをインポートWindowsコンソールアプリケーションを、このcreateCustomerのメソッドを呼び出し、URIおよび顧客の実際のパラメータ値を渡しますJSONオブジェクト:

static async Task EnvokeCreateCustomer() 
     { 
      Customer customer = new Customer {Name="",Address="" }; 
      var URI = "http://my_api:8080/Customer"; 
      RestClient.Client restClient = new RestClient.Client(); 
      restClient.CreateCustomer(URI, customer); 
     } 

このコードは実行されますが、APIに当たったイベントではありません。 GET APIと同じ問題。

このようなクラスライブラリを作成する方法はありますか?コンソールアプリケーションで呼び出すことはできますか?

+3

あなたのライブラリ 'CreateCustomer()'はパラメータを受け付けないので、どのようにパラメータを呼び出していますか? – Rahul

+0

最後の行を待っていないので、次のように変更します。await restClient.CreateCustomer(URI、customer); EnvokeCreateCustomer()の呼び出しを待っていますか? –

+0

@PeterBons、それは非同期であるため、あなたがそれを待つことを制限するものではありません。 – Rahul

答えて

1

あなたは、メソッド呼び出し待っていない:アプリケーションのホストに応じて、これはしてもしなくてもよい顕著違いを作ることが

await restClient.CreateCustomer(URI, customer); 

を。 コンソールアプリケーションでは、アプリケーションが単にそのことを行い、すぐに終了することがありますが、それは大きな違いをもたらします。

呼び出しが待たれていなければ、プロセスで受け取ったエラーはまったく気づかれないかもしれません。だから、可能です。問題があり、問題が何であるかを伝えようとしていますが、あなたのコードは単純に無視しています。

確かにこれを指摘するコンパイラ警告があります。コンパイラ警告を無視しないでください。


サイドノート:このコードはどのようにコンパイルされますか?この:

restClient.CreateCustomer(URI, customer); 

はこれを呼び出すことはできません。

static async Task CreateCustomer() 

あなたが私たちを見せていることは、あなたの実際のコードではない場合、すべてのベットは限り答えが行くようにオフになっています。

関連する問題