C# HttpClient.PostAsync终止程序,退出代码为0
4.我在网上浏览了一下,没有找到任何答案。。我确实在这里找到了一个有我同样问题的帖子,但它并没有解决我的问题。 (HttpClient.PostAsync将退出退出代码为0的应用程序) 当我运行这段代码时,发送到vendorAddress的邮件就起作用了。 但是当我进入PostPaymentTerms时,程序在postAsync函数上终止,没有错误消息、代码或任何东西。 我不明白为什么它对其中一个有效而对另一个无效 我使用了相同的Url和json文本,并使用postman插件通过chrome发布了一篇文章。两个电话都有效,我可以得到结果 我已将帖子改为使用WebClient,并同时调用工作和结果。 但我需要在代码中保留HTTPClient服务 有什么建议吗C# HttpClient.PostAsync终止程序,退出代码为0,c#,httpclient,C#,Httpclient,4.我在网上浏览了一下,没有找到任何答案。。我确实在这里找到了一个有我同样问题的帖子,但它并没有解决我的问题。 (HttpClient.PostAsync将退出退出代码为0的应用程序) 当我运行这段代码时,发送到vendorAddress的邮件就起作用了。 但是当我进入PostPaymentTerms时,程序在postAsync函数上终止,没有错误消息、代码或任何东西。 我不明白为什么它对其中一个有效而对另一个无效 我使用了相同的Url和json文本,并使用postman插件通过chrome发布
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)
有一次我加上了。。我得到了结果,程序没有终止
同步调用与异步调用
谢谢大家。。我想只是需要一个新的视角