我有一个API调用,它使用.Result
来同步操作。
HttpResponseMessage response = client.PostAsync("api/updatelastname", new StringContent(string.Format("UserId={0}&LastName={1}", userId, lastName), Encoding.UTF8, "application/x-www-form-urlencoded")).Result;
要查看API是否已成功完成,请在继续之前使用以下if..then
语句。
if (!response.IsSuccessStatusCode)
{
// Something went wrong
}
令我困惑的是,有时api调用完成没有问题,然后有时它没有。似乎有时代码不等待API调用完成,因此response.IsSuccessStatusCode
是false
。
理想情况下,我认为最好在API调用中使用async
方法并使用await
关键字,但Web应用程序目前仅针对.NET 4,并且在.NET v4.5之前不支持async
和await
。
在检查response.IsSuccessStatusCode
之前,有关如何确保API调用完成的任何想法?没有转向.NET v4.5 +?
Web应用程序目前仅针对.NET 4,直到.NET v4.5才支持异步和等待。
它是需要支持PostAsync
的客户端(调用await
的客户端,而不是Web应用程序)。我假设您的意思是客户端是一个Web应用程序。
有时api调用完成没有问题,然后有时它没有。
有时它没有完成,你的意思是?在,代码永远不会从Result
返回?
在某些情况下,Result
将陷入僵局,但我很惊讶在ASP.NET上找到一个(据我所知,所有Result
与HttpClient
的死锁仅在某些移动平台上)。
似乎有时代码不会等待API调用完成,因此response.IsSuccessStatusCode为false。
您怀疑的是不可能的。 Result
将阻止,直到HTTP请求完成。如果IsSuccessStatusCode
返回false
,那那是因为API返回了一个非成功状态代码。