Всем привет, пытаюсь сделать цикл, который будет делать Get запросы по ссылкам из списка, а также сортировать их. Есть два списка "Новые ссылки" и "Старые ссылки". Переменной "Текущая ссылка" мы присваиваем значение из листа "Новых ссылок" по индексу 0. После чего мы делаем GET запрос по "Текщей ссылке", очищаем ответ с помощью регулярок и работой со строками до состояния обычной ссылки формата https://site.com/.../.../ и т.д., заносим эти значения в список "Новые ссылки", после добавляем "Текущую ссылку" в список "Старые ссылки" и удаляем эту ссылку из "Новые ссылки". А когда ссылки в "Новых ссылках" закончатся выйти из цикла. Возможно написал ересь, но я только недавно начал изучать C# и пока смог понять эту задачку таким образом. Вот мой код. Он делает get запросы по ссылкам после первого get запроса, но дальше не спускается. Подскажите что делаю не так. И если не сложно подскажите, что почитать или посмотреть, чтобы лучше разобраться в проблеме. Заранее спасибо
private async void button4_Click(object sender, EventArgs e)
{
string currLinks;
int indexCurrLinks = 0;
var NewLinks = new List<string>();
var OldLinks = new List<string>();
var LinksRVT = new List<string>();
//Производим очистку Json ответа, и переносим URL с текстовой переменной в Список
try
{
string text = await GetApiRequestAsync("https://developer.api.autodesk.com/project/v1/hubs");
Regex regex = new Regex(@"(?<=href"":"")(.*?)""", RegexOptions.Multiline | RegexOptions.Compiled);
MatchCollection matches = regex.Matches(text);
if (matches.Count > 0)
{
foreach (Match match in matches)
richTextBox5.Text += ($"{match.Value.TrimEnd("\"".ToCharArray())}\n");
listBox1.Items.AddRange(richTextBox5.Lines);
NewLinks.AddRange(richTextBox5.Lines);
}
else
MessageBox.Show("Совпадений не найдено");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//Создаём цикл, который будет брать по индексу ссылку из Нового списка,
//приравнивать к переменной для нового GET запроса, очищать Json ответ(регулярными выражениями)
//до получения ссылок, и переносить их в Новый список, если этих ссылок нет в Старом списке
for (currLinks = NewLinks[indexCurrLinks]; NewLinks.Count != 0; currLinks = NewLinks[indexCurrLinks++])
{
try
{
//Делаем GET запрос
string text = await GetApiRequestAsync(currLinks);
//очищаем регулярками
Regex regex = new Regex(@"(?<=href"":"")(.*?)""", RegexOptions.Multiline | RegexOptions.Compiled);
MatchCollection matches = regex.Matches(text);
if (matches.Count > 0)
{
foreach (Match match in matches)
richTextBox5.Text += ($"{match.Value.TrimEnd("\"".ToCharArray())}\n\n\n");
//В список NewLinks из rtb5 заносим ссылки
NewLinks.AddRange(richTextBox5.Lines);
//Добавляем currLinks в список OldLinks
OldLinks.Add(NewLinks[indexCurrLinks]);
//Удаляем currLinks из списка NewLinks
NewLinks.RemoveAt(indexCurrLinks);
currLinks = NewLinks[indexCurrLinks];
if (indexCurrLinks == 0)
{
break;
}
}
else
richTextBox6.Text += ("Совпадений не найдено\n\n\n");
richTextBox6.Text += ($"{text}\n\n\n");
}
catch (Exception ex)
{
richTextBox6.Text += $"{ex.Message}\n\n\n";
}
//Проверяем не внесены ли ссылки в OldLinks, если нет, результаты вносим в NewLinks
//Запускаем цикл заново пока NewLinks список не станет пустым
}
}
int indexCurrLinks = 0;это уберите совсем. 2) вот эту строкуfor (currLinks = NewLinks...замените на этуfor (int index = 0; index < NewLinks.Count; index++)3) внутри циклаstring text = await GetApiRequestAsync(NewLinks[index]);– aepot Apr 26 '21 at 13:35