C# forEach 循环将结果增加三倍



我使用 ForEach 循环从 3 个不同的 URL 返回状态代码来迭代结果。它返回的结果很好,但返回 3 组结果。

public static List<Models.SiteStatus> GetStatus()
{
statusList.Clear();
// website urls to check
string site1 = "https://www.google.com";
string site2 = "https://www.google.com";
string site3 = "https://www.google.com";
int site1Status = 0;
int site2Status = 0;
int site3Status = 0;
HttpStatusCode result = default;
HttpWebResponse response = null;
// add urls to a list to pass through
List<Uri> urls = new List<Uri>();
urls.Add(new Uri(site1));
urls.Add(new Uri(site2));
urls.Add(new Uri(site3));

// check status per site
foreach (Uri u in urls)
{
try
{
HttpWebRequest request = WebRequest.Create(u) as HttpWebRequest;
// just request headers
request.Method = "HEAD";
response = request.GetResponse() as HttpWebResponse;
result = response.StatusCode;
// 15 second timeout
request.Timeout = 15000;
}
catch (Exception)
{
throw;
}
finally
{
if (response != null)
{
if (response.ResponseUri.AbsoluteUri == site1 && response.StatusCode == result)
{
site1Status = (int)response.StatusCode;
}
if (response.ResponseUri.AbsoluteUri == site2 && response.StatusCode == result)
{
site2Status = (int)response.StatusCode;
}
if (response.ResponseUri.AbsoluteUri == site3 && response.StatusCode == result)
{
site3Status = (int)response.StatusCode;
}
var res = new SiteStatus
{
url1Site = site1,
url1Status = site1Status,
url2Site = site2,
url2Status = site2Status,
url3Site = site3,
url3Status = site3Status
};
statusList.Add(res);
}
else
{
}
}
// close connection
response.Close();
}
return statusList;
}

返回的结果如下所示;

  • 站点 1 = 200
  • 站点 2 = 0
  • 站点 3 = 0

  • 站点 1 = 200
  • 站点 2 = 200
  • 站点 3 = 0

  • 站点 1 = 200
  • 站点 2 = 200
  • 站点 3 = 200

我只需要前端 html 中返回的最后一组结果,但似乎无法弄清楚。非常感谢任何帮助。

将创建res并添加到列表中的行移出循环。

/// MOVE THIS HERE, JUST ABOVE 'RETURN'
var res = new SiteStatus
{
url1Site = site1,
url1Status = site1Status,
url2Site = site2,
url2Status = site2Status,
url3Site = site3,
url3Status = site3Status
};
statusList.Add(res);
///
return statusList;

最新更新