所以我正在尝试使用http客户端向API发送一个多形式的POST,但它只是挂在那里。我在控制台中测试这个代码并且它应该正常工作,但后来我尝试像UI一样运行它
private static async Task<string> ApiTask(...)
{
var SourceStream = File.Open(imgpath,FileMode.Open);
var FileStreamContent = new StreamContent(SourceStream);
FileStreamContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
var client = new HttpClient();
using (var formData = new MultipartFormDataContent())
{
formData.Add(new StringContent("this is a test"),"comment");
formData.Add(new StringContent("Command: detect"),"message");
formData.Add(fileStreamContent, "image","image.jpg");
var response = await client.PostAsync(url,formData).ConfigureAwait(false);
var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
return responseString
}
}
我从EventHandler
中调用它public async void buttnclck(object sender, EventArgs e)
{
var task = await ApiTask(...);
lblresult.Text = task;
}
但正如我所说的那样,代码只是在de .PostAsync
行中保持不变或者抛出System.Threading.Task.TaskCanceledException。
那么我在这里错过了什么?我讨厌async / await方法就好了,但很明显我不是。我也尝试使用.Result
但它甚至无法工作并且会抛出System.AggregateException。所以,请帮助,一直试图让其工作修改代码作为其他建议的响应,但仍然无法正常工作
编辑:
经过几个小时的调试和搜索,我发现我的问题依赖于formData.Add(FileStreamContent, "image","image.jpg");
也许我没有正确地序列化图像?我怎样才能解决这个问题??