2016-04-01 9 views
0

コンソールアプリケーションを使用してWebAPIサービスコールを使用して通信する際に克服しなければならなかった問題について、コミュニティと共有したいと考えました。クライアントアプリケーションのHttpClientを使用してWebAPIにオブジェクトパラメータを送信する

パラメータとして単純な型を渡すのは簡単ですが、複雑な型を渡すのは簡単ではありませんでした。私は何とか型をシリアル化し、それをパラメータとして渡す必要がありました。私のアプローチは以下の通りです。私は誰かがこの便利な

答えて

1

WebAPIの方法を見つける願っています:

 public IHttpActionResult PurchaseOrders([FromUri]string parameters) 
     { 
     var criteria = new JavaScriptSerializer().Deserialize<PurchaseOrderManager.Criteria>(parameters); 
     var result = PurchaseOrderManager.PurchaseOrderSummary(criteria); 
     return Content(HttpStatusCode.OK, result); 
     } 

サービスを呼び出すクライアント・メソッド...

private static async Task<List<PurchaseOrderListModel>> GetPendingPurchaseOrdersByUser(string token, UserModel userModel) 
{ 
    var service = ConfigurationManager.AppSettings["service:address"]; 

    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri(service); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); 

     var content = new StringContent(JsonConvert.SerializeObject(new 
     { 
      Filter = "PENDING", 
      RequestType = "REQUEST" 
     }), Encoding.UTF8, "application/json"); 
     var paramsValue = content.ReadAsStringAsync().Result; 


     HttpResponseMessage response = await client.GetAsync($"purchaseorders/purchaseorders?parameters={paramsValue}"); 
     if (response.IsSuccessStatusCode) 
     { 

      var purchaseOrders = response.Content.ReadAsAsync<List<PurchaseOrderListModel>>().Result; 
      //do work.... 
      //return some value 
     } 
    } 
    return null; 
} 
+0

は個人的に私はこれをしないだろう。コントローラの操作で 'PurchaseOrderManager.Criteria'を単に使用しているのではないのですが、なぜ' public IHttpActionResult PurchaseOrders([FromUri] PurchaseOrderManager.Criteria parameters) '?共有いただきありがとうございますが、誰もがこのアプローチを実際に実装することはお勧めしません。 –

+0

簡単に言えば、提示される問題はサービスの実装の詳細ではなく、HttpClient APIからどのように通信するかということではないことを謝ります。 – BDarley

+0

なぜリソースのURLかクエリ文字列? 'PurchaseOrderManager.Criteria'はどれだけ複雑ですか? 'PurchaseOrderManager.Criteria'のソースリストで質問を更新することは可能ですか? –

関連する問題