У меня есть список идентификаторов, и я просматриваю каждый из них, чтобы получить подробную информацию. В некоторых случаях вызов API терпит неудачу. Поэтому я хочу пропустить неудачный вызов API и перейти к следующему вызову ID API; аналогично при ошибке goto next.
foreach (var item in ID)
{
try
{
List<string> resultList = new List<string>();
url = string.Format(HttpContext.Current.Session["url"].ToString() +
ConfigurationManager.AppSettings["propertyURL"].ToString(),
HttpContext.Current.Session["ObjectID"].ToString(), item);
var request1 = WebRequest.Create(url);
request1.Headers["X-Authentication"] = HttpContext.Current.Session["vaultToken"].ToString();
request1.Method = "GET";
request.Headers.Add("Cache-Control", "no-cache");
//// Get the response.
var response1 = request1.GetResponse();
var deserializer1 = new DataContractJsonSerializer(typeof(PropertyValue[]));
var result1 = (PropertyValue[])deserializer1.ReadObject(response1.GetResponseStream());
}
catch (Exception ex)
{
}
}
Каково возможное решение, чтобы даже в случае сбоя вызова API циклы foreach перешли к следующему вызову API идентификатора.
Чтобы уточнить то, что сказал @LasithaPetthawadu, вы можете зарегистрировать неудачный вызов в блоке catch. Цикл будет продолжен, так как try catch находится внутри вашего foreach. То есть вам не нужно ничего реализовывать.
Что не так с этим кодом?
Похоже, вам просто нужно вывести resultList
за пределы контура. В остальном все нормально ...
List<string> resultList = new List<string>();
foreach (var item in ID)
{
try
{
// Your Call Here
// Add Result to resultList here
}
catch
{
}
}
Собственно, это более понятно.
Dictionary<int, string> resultList = new Dictionary<int, string>();
foreach (var item in ID)
{
resultList.Add(item,string.Empty);
try
{
// Your Call Here
// Add Result to resultList here
var apiCallResult = apiCall(item);
resultList[item] = apiCallResult;
}
catch
{
}
}
Вы можете запросить словарь для ID
, которые не дали результата.
Этот пустой блок улова будет преследовать вас в будущем!