HttpClient.PostAsync以退出代码0终止程序

3
我在网上找了很多答案,但都没有解决我的问题。我在这里找到了一个与我的问题相同的帖子,但它并没有解决我的问题。(HttpClient.PostAsync使应用程序崩溃退出)
当我运行此代码时,向vendorAddress发的post请求有效。但是当我尝试向PaymentTerms发出post请求时,程序在postAsync函数中终止,没有任何错误消息、代码或其他内容。我不明白为什么一个可以工作而另一个却不能。
我使用相同的URL和JSON文本通过Chrome和postman插件进行了post请求。两个调用都能够工作,并且我可以得到结果。
我已经改变了我的post方法,使用WebClient而不是HTTPClient,两次调用都工作正常,我可以得到结果。但我需要在我的代码中保留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);

        }
    }
1个回答

3

嗯,我已经解决了在这里检查我的帖子的问题。

我设置了一个断点,所以断点的红色使得很难看到我的问题。

在我的示例的第22行

var result1 = enconPostData("PaymentTerms", null);

缺少await指令

var result1 = await enconPostData("PaymentTerms", null);

一旦我添加了它... 我就得到了我的结果,并且程序没有终止。

同步调用vs异步调用

感谢所有人.. 我想只是需要一个新的视角。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接