У меня есть вызов API, который использует функцию .Result
для синхронного действия.«.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
.
В идеале я думаю, что было бы лучше, чтобы сделать метод async
и использовать await
ключевое слово при вызове API, однако веб-приложение только цели .NET 4 в данный момент и async
и await
не не поддерживаются до .NET v4. 5.
Любые мысли о том, как я могу убедиться, что вызов API завершен до проверки response.IsSuccessStatusCode
? Не перейдя в .NET v4.5 +?
Спасибо, Стивен! Вы правы, клиент, вызывающий API, действительно является веб-приложением. Что я имел в виду под «не завершает», так это то, что 'IsSuccessStatusCode' иногда возвращает false, но когда я смотрю на вызов api, ничего не получается. – webworm
@webworm: Если 'IsSuccessStatusCode' возвращает' false', то WebAPI действительно возвращает код ошибки. [Реализация этого свойства] (https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs#L123) тривиальна. –
Спасибо за эту ссылку. Что-то еще должно продолжаться. Мне нужно выяснить, какой код состояния возвращается. Спасибо за помощь! Любите свою книгу «async». – webworm