【问题标题】:C# ForEach Loop Tripling ResultsC# ForEach 循环三倍结果
【发布时间】:2020-01-30 18:01:59
【问题描述】:

我使用 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 中返回的最后一组结果,但似乎无法弄清楚。非常感谢任何帮助。

【问题讨论】:

  • 您每次在 foreach 循环周围都会创建一组新结果。将new SiteStatus 行移出循环

标签: c# foreach


【解决方案1】:

将创建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;

【讨论】:

    猜你喜欢
    • 2013-12-15
    • 2014-12-05
    • 2013-05-19
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2015-09-18
    相关资源
    最近更新 更多