2016-04-01 18 views
0

Konsol uygulamasıyla çalışırken ve WebAPI servis çağrısı ile iletişim kurarken üstesinden gelmem gereken bir sorun hakkında toplulukla paylaşmak istedim.İstemci uygulamasından HttpClient kullanarak WebAPI'ya nesne parametresi gönderiliyor

Basit türlerin parametre olarak geçirilmesi düz ileri doğru olmakla birlikte, karmaşık bir türden geçiş yapmak o kadar kolay değildi. Türünü bir şekilde serileştirmem ve bunu bir parametre olarak aktarmam gerekiyordu. Benim yaklaşımım şu şekildedir. Birinin bu yararlı

cevap

1

WebAPI yöntemini bulur umut:

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

servisi arayarak müşteri yöntemi ...

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

Şahsen ben bunu yapmaz. Neden sadece "PurchaseOrderManager.Criteria" cihazını denetleyici işleminizde değil, aynı zamanda public IHttpActionResult PurchaseOrders ([FromUri] PurchaseOrderManager.Criteria parameters) 'kullanıyorsunuz? Paylaştığınız için teşekkürler, ancak bu yaklaşımı gerçekten uygulayan herkesi tavsiye etmem. –

+0

Kısacası, sunulmakta olan konu hizmetin uygulama ayrıntılarıyla ilgili değildi, bir tanesi HttpClient API'sinden nasıl iletişim kuruyordu, o kadar net olmadığından dolayı özür dilerim – BDarley

+0

Sorgulama kriterlerinizi neden kaynak URL’de belirtmek mümkün değil? sorgu dizesi 'PurchaseOrderManager.Criteria' ne kadar karmaşık? Soruyu 'PurchaseOrderManager.Criteria' için kaynak listesiyle güncelleştirmek mümkün mü? –

İlgili konular