C# HttpClient.PostAsync终止程序,退出代码为0

C# HttpClient.PostAsync终止程序,退出代码为0,c#,httpclient,C#,Httpclient,4.我在网上浏览了一下,没有找到任何答案。。我确实在这里找到了一个有我同样问题的帖子,但它并没有解决我的问题。 (HttpClient.PostAsync将退出退出代码为0的应用程序) 当我运行这段代码时,发送到vendorAddress的邮件就起作用了。 但是当我进入PostPaymentTerms时,程序在postAsync函数上终止,没有错误消息、代码或任何东西。 我不明白为什么它对其中一个有效而对另一个无效 我使用了相同的Url和json文本,并使用postman插件通过chrome发布

4.我在网上浏览了一下,没有找到任何答案。。我确实在这里找到了一个有我同样问题的帖子,但它并没有解决我的问题。 (HttpClient.PostAsync将退出退出代码为0的应用程序)

当我运行这段代码时,发送到vendorAddress的邮件就起作用了。 但是当我进入PostPaymentTerms时,程序在postAsync函数上终止,没有错误消息、代码或任何东西。 我不明白为什么它对其中一个有效而对另一个无效

我使用了相同的Url和json文本,并使用postman插件通过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);

        }
    }
static void Main(字符串[]args)
{
RunAsync().Wait();
}
静态异步任务RunAsync()
{
尝试
{
//工作
var结果=等待enconPostData(“卖方地址”,JsonVendorAdd);
//无法工作。在postAsync上失败
var result1=enconPostData(“付款条件”,null);
}
捕获(例外e)
{
控制台写入线(e.Message);
}           
}
静态公共异步任务enconPostData(字符串数据类型,对象[]jsObject)
{
////jsObject是一个json字符串/对象////
字符串jsonString=null,URIaddress=null;
交换机(数据类型)
{                
案例“卖方地址”:
//创建要发布的Json对象
//EnVendors enconvend=新的EnVendors();
EnVendors envend=新的EnVendors();
envend.data=(Vendor[])jsObject;
URIaddress=baseUrl+“api/CONTACTS/updatexxxxx”;
//序列化为JsonString
jsonString=JsonConvert.SerializeObject(EnConverd);
打破
案例“付款条件”:
ContractInput entermdate=新的ContractInput();
//在这里用日期设置JsonObject
entermdate.DateFrom=新的日期时间(2016,10,1);
entermdate.DateTo=新的日期时间(2016,10,30);
URIaddress=baseUrl+“api/PaymentTerms/ActiveXXXXXX”;
//序列化为JsonString
jsonString=JsonConvert.SerializeObject(entermdate);
打破
}
返回等待后同步(URIaddress,jsonString);
}
静态公共异步任务PostAsync(字符串uri、字符串jsonString)
{
//Post到API调用
使用(var Client=new HttpClient())
{                   
/////////
///此程序在PostSync on PaymentTerms呼叫时中止。适用于vendorAddress
////////
var response=wait Client.PostAsync(uri,新的StringContent(jsonString,Encoding.UTF8,“application/json”);
//如果不成功,将引发异常
response.EnsureSuccessStatusCode();
string content=wait response.content.ReadAsStringAsync();
返回等待任务。运行(()=>content);
}
}

好吧,我在这里查看我的帖子时发现了我的问题。 我设置了一个断点,因此断点的红色很难看出我的问题

在我的例子的第22行 var result1=enconPostData(“付款条件”,null)

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

有一次我加上了。。我得到了结果,程序没有终止

同步调用与异步调用

谢谢大家。。我想只是需要一个新的视角