簡體   English   中英

HttpClient.PostAsync終止程序,退出代碼為0

[英]HttpClient.PostAsync terminates program with exit code 0

環顧四周,沒有找到任何答案。.我確實在這里找到了與我相同的問題的帖子,但是它不能解決我的問題。 (HttpClient.PostAsync退出退出代碼為0的應用程序)

當我運行此代碼時,vendorAddress的帖子起作用。 但是當我要發布PaymentTerms時,該程序將終止於postAsync函數,而不會出現錯誤消息,代碼或任何其他內容。 我不明白為什么它對一個有用,但對另一個不起作用。

我已經使用了相同的網址和json文本,並使用郵差插件在Chrome中進行了發布。 這兩個電話都可以工作,我可以得到結果。

我已將帖子更改為使用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);

        }
    }

好吧,我在這里查看我的帖子時發現了我的問題。 我設置了一個斷點,所以斷點的紅色使我很難看到問題。

在我的示例的第22行上,var result1 = enconPostData(“ PaymentTerms”,null);

缺少等待命令var result1 =等待enconPostData(“ PaymentTerms”,null);

一旦我添加了..我得到了我的結果,並且程序沒有終止。

同步呼叫與異步呼叫

謝謝大家..我只需要一個新的視角。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM