I'm returning the status code from 3 different URL's using a ForEach Loop to iterate through the results. It returns the results just fine, but is returning 3 sets of results.
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;
}
The returned results appear something like this;
- Site 1 = 200
- Site 2 = 0
- Site 3 = 0
- Site 1 = 200
- Site 2 = 200
- Site 3 = 0
- Site 1 = 200
- Site 2 = 200
- Site 3 = 200
I just need the last set of results returned in the frontend html, but can't seem to figure it out. Any assistance it greatly appreciated.
new SiteStatuslines outside of the loop