C# ForEach L oop Результаты утроения - PullRequest
1 голос
/ 30 января 2020

Я возвращаю код состояния с 3 разных URL-адресов, используя ForEach L oop, чтобы просмотреть результаты. Он возвращает результаты просто отлично, но возвращает 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, но не могу понять это. Любая помощь это очень ценится.

1 Ответ

6 голосов
/ 30 января 2020

Переместите эту строку, которая создает res, и добавьте в список из списка l oop.

/// 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;
...