【问题标题】:C# Web API loop posts one value onlyC# Web API 循环只发布一个值
【发布时间】:2020-02-02 15:25:07
【问题描述】:

我将我的行从 SQL 读取到对象中,然后想使用下面的代码将它们发布到 web api。发布了一行,但未发布其他 99 行。对于每个循环,我的代码中是否缺少某些内容?

下面的代码……

  using (SqlCommand command = new SqlCommand(query, connection))
                    {
                        connection.Open();
                        List<ProductSQL> myObjectList = new List<ProductSQL>();
                        var reader = command.ExecuteReader();
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                ProductSQL myObject = new ProductSQL();
                                myObject.sku = reader["sku"].ToString();
                                myObject.title = reader["title"].ToString();
                                myObject.description = reader["description"].ToString();
                                myObjectList.Add(myObject);
                            }
                        }
                        var JsonResult = JsonConvert.SerializeObject(myObjectList);
                        Console.WriteLine(myObjectList);
                        Console.WriteLine(JsonResult);



                /* Program Initialization Now need to see why multiple articles are not*/

                Console.WriteLine("Post Articles To API");
                HttpResponseMessage response2;
                Product NewProduct = new Product();
                foreach (ProductSQL product in myObjectList.ToList())
                {

                    NewProduct.sku = product.sku;
                    NewProduct.title = product.title;
                    NewProduct.description = product.description;
                }


                /* Mapping that needs to be autmated between models , Product.cs and ProductSQL.cs */

                response2 = await client.PostAsJsonAsync("sites/1/products.json",NewProduct);
                if (response2.IsSuccessStatusCode)

               {

                    Uri Product = response2.Headers.Location;
                    Console.WriteLine(response2);

                      }

【问题讨论】:

  • 您在foreach 循环之外发出发布请求,这就是为什么PostAsJsonAsync 只为第一个产品运行一次。

标签: c# json api foreach


【解决方案1】:

您只发布了一个产品,因为PostAsJsonAsync 在 foreach 块之外执行!
将代码放在 foreach 块中应该可以解决您的问题。

foreach (ProductSQL product in myObjectList)
{
    Product newProduct = new Product {
       sku = product.sku,
       title = product.title,
       description = product.description,
    }

    /* Mapping that needs to be autmated between models , Product.cs and ProductSQL.cs */    
    response2 = await client.PostAsJsonAsync("sites/1/products.json", product);
    if (response2.IsSuccessStatusCode)
    {
        Uri productUri = response2.Headers.Location;
        Console.WriteLine(response2);
    }      
}       

其他事项

  1. myObjectList 已经是一个列表,所以你不需要.ToList()
  2. var JsonResult = JsonConvert.SerializeObject(myObjectList);有什么用?
  3. 关于命名约定的小事:NewProduct 如果命名为newProduct 会更好

【讨论】:

  • 这个 Marco 的新人,感谢我将深入研究的提示,非常感谢上述 Loop 的帮助,看到结果真棒:)。
猜你喜欢
  • 1970-01-01
  • 2014-07-17
  • 2019-08-01
  • 2018-12-13
  • 2014-08-27
  • 2017-04-03
  • 2022-01-23
  • 2020-03-24
  • 2013-11-09
相关资源
最近更新 更多