#c#
#c#
Вопрос:
Я пытаюсь найти наилучший способ заполнить значение из API, которое существует только после того, как я делаю второй вызов и заполняю переменную. Я не был уверен, что использование динамического объекта — лучший сценарий.
У меня есть следующий цикл ниже. В моем первом экземпляре я получу «статус ожидания» от Postman из моего GetServiceOrderStatusAsync, а во втором экземпляре я получу «статус успеха».
К сожалению, я не могу установить «TrackingID = serviceResults.partnerReference.TrackingID», поскольку serviceResults.partnerReference.TrackingID создается только при втором вызове.
Это не работает:
var finished = false;
var trackingId = ""
do {
var serviceResults = await client.Services.GetServiceOrderStatusAsync.....
//This is correct ----1st call
if (serviceResults.Status == ServiceStatus.Pending) {
finished = false;
}
// This is not correct because this serviceResults.partnerReference.trackingID was never
//initialized on the first call.
if (serviceResults.Status == ServiceStatus.Success) {
trackingId = serviceResults.partnerReference.trackingID -> this never exist
finished = true;
}
}
while (!finished);
Итак, я попробовал это, но я не уверен, что это лучшее использование динамического объекта:
var finished = false;
var trackingId = "";
do {
var serviceResults = await client.Services.GetServiceOrderStatusAsync("11158174", transactionId).ConfigureAwait(false);
if (serviceResults.Status == ServiceStatus.Pending) {
finished = false;
}
if (serviceResults.Status == ServiceStatus.Success) {
dynamic serviceResulys = serviceResults;
trackingId = serviceResulys.serviceResults.trackingID; -->will that be the best way?
finished = true;
}
if (serviceResults.Status == ServiceStatus.Error) {
finished = true;
transactionId = "Error";
}
}
while (!finished);
Вот мой вызов Postman: первый вызов API TrackingID не существует, он существует только тогда, когда я делаю второй вызов.
Комментарии:
1. Трудно сказать, поскольку я не вижу, чтобы что-то действительно возвращалось в этом коде. В зависимости от того, как вы сериализуете ответ, его можно настроить так, чтобы пропускать нули
2. Для первого блока кода, где написано «Это не работает», не могли бы вы объяснить, почему именно это не работает? Похоже, что это будет работать нормально, учитывая, как вы это объяснили. If
serviceResults.partnerReference.trackingID
заполняется только в том случае, если статус == Успех, и вы получаете доступ толькоserviceResults.partnerReference.trackingID
к блоку if(serviceResults.Status == ServiceStatus.Success)
, тогда в чем проблема?