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