2016-12-02 3 views
2

Посмотрите по сети и не нашли ответов. Я нашел сообщение здесь с моей же проблемой, но это не решило мою проблему. (HttpClient.PostAsync выбивает приложение с кодом выхода 0)HttpClient.PostAsync завершает программу с кодом выхода 0

Когда я запускаю этот код, сообщение для vendorAddress работает. , но когда я получаю сообщение PaymentTerms, программа завершается функцией postAsync без сообщения об ошибке, кода или чего-то еще. Я не понимаю, почему это работает для одного, но не для другого.

Я взял тот же текст Url и json и сделал сообщение через хром, используя плагин postman. Оба вызова работают, и я могу вернуть результаты.

Я поменял свое сообщение, чтобы использовать WebClient, и оба работают, и я получаю результаты. , но мне нужно сохранить HTTPClient-сервис в моем коде.

Любые предложения?

static void Main(string[] args) 
    { 
     RunAsync().Wait(); 
    } 

    static async Task RunAsync() 
    { 

     try 
     { 
      // works 
      var result = await enconPostData("vendorAddress", JsonVendorAdd); 

      // does not work. fails on postAsync 
      var result1 = enconPostData("PaymentTerms", null); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     }   
    } 

    static public async Task<string> enconPostData(string datatype, Object[] jsObject) 
    { 
     ////jsObject is a json string/object//// 

     string jsonString = null, URIaddress = null; 

     switch (datatype) 
     {     
      case "vendorAddress": 
       // Create Json Object to post 
       //EnVendors enconvend = new EnVendors(); 
       EnVendors envend = new EnVendors(); 

       envend.data = (Vendor[])jsObject; 

       URIaddress = baseUrl + "api/CONTACTS/UpdateXXXXXX"; 

       // Serialize to a JsonString 
       jsonString = JsonConvert.SerializeObject(enconvend);     
       break; 

      case "PaymentTerms":     
       ContractInput entermdate = new ContractInput(); 
       //Set JsonObject here with dates 
       entermdate.DateFrom = new DateTime(2016, 10, 1); 
       entermdate.DateTo = new DateTime(2016, 10, 30); 


       URIaddress = baseUrl + "api/PaymentTerms/ActiveXXXXXX"; 

       // Serialize to a JsonString 
       jsonString = JsonConvert.SerializeObject(entermdate); 

       break; 
     } 

     return await PostAsync(URIaddress, jsonString); 
    } 

    static public async Task<string> PostAsync(string uri, string jsonString) 
    { 

     // Post to API Call 
     using (var Client = new HttpClient()) 
     {     
     ///////// 
     /// program aborts here at PostAsync on PaymentTerms Call. works fine for vendorAddress 
     //////// 
      var response = await Client.PostAsync(uri, new StringContent(jsonString, Encoding.UTF8, "application/json")); 
      //will throw an exception if not successful 
      response.EnsureSuccessStatusCode(); 

      string content = await response.Content.ReadAsStringAsync(); 
      return await Task.Run(() => content); 

     } 
    } 

ответ

2

Ну, я выяснил свою проблему при рассмотрении моего сообщения здесь. У меня был набор точек останова, поэтому красный цвет точки останова затруднил мою проблему.

в строке 22 моего примера var result1 = enconPostData ("PaymentTerms", null);

отсутствует команда ожидания var result1 = wait enconPostData ("PaymentTerms", null);

как только я добавил, что .. Я получаю свои результаты, и программа не заканчивается.

синхронный вызов против асинхронного вызова

Спасибо всем .. просто необходим новый взгляд я думаю.