我想通过64位curl窗口将数据发布到asp.net Web api(使用C#)上。
但是,每次这样做,控件都会传递给HttpPost方法,但是accepting参数的值仍为null。
这在不使用浏览器上的URL的情况下可以正常工作..所以数据库没有问题。

我的curl语法是:

curl -X POST 'Content-Type:application/json' --data '[{"Id":"44","Name":"Abc","Category":"xyz","Price":"98"}]' "http://example.com/Post/Products"

我的Web API服务器端代码是
[ActionName("Default Action")]
[Route("Post/Products")]
[AcceptVerbs("Get"), HttpPost]
public List<ProductDetails> PostProduct([FromBody] List<ProductDetails>  pro)
{
    // IEnumerable<string> headerValues = Request.Headers.GetValues("MyCustomID");
    // var ide = headerValues.FirstOrDefault();
    // int id=Convert.ToInt16(pro.Id);
    // int Pric = Convert.ToInt16(Pricc);
    con = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\mydatabase.mdf;Integrated Security=True");
    SqlCommand ss = new SqlCommand("Insert into [Table] values ("+pro[0].Id+",'"+pro[0].Name+"','"+pro[0].Category+"',"+pro[0].Price+")", con);
    con.Open();
    SqlDataReader dr2 = ss.ExecuteReader();
    con.Close();
    con.Open();
    SqlCommand cmd=new SqlCommand ("select * from [Table]",con);
    SqlDataReader dr1 = cmd.ExecuteReader();
    if (dr1.HasRows)
    {
        while (dr1.Read())
        {
            product1.Add(new ProductDetails() { Id = int.Parse(dr1[0].ToString()), Name = dr1[1].ToString(), Category = dr1[2].ToString(), Price = int.Parse(dr1[3].ToString()) });
        }
    }
    con.Close();

    if (ModelState.IsValid)
    {
        // var item = new pro { Id = id, Name = Nam, Category = Cate, Price = Pric };
        // products.Add(item);
        HttpResponseMessage response =Request.CreateResponse(HttpStatusCode.Created, product1);
        // response.Headers.Location = new Uri(Url.Link("DefaultApi1", new { id=item.Id }));
    }
    return product1;
}

最佳答案

这是由于在Windows上使用curl时cmd.exe如何处理引号。

将命令更改为仅使用双引号,并转义JSON数据中的所有双引号。

curl -X POST "Content-Type:application/json" --data "[{\"Id\":\"44\",\"Name\":\"Abc\",\"Category\":\"xyz\",\"Price\":\"98\"}]" "http://example.com/Post/Products"

关于c# - curl在POST请求上向Web API发送空数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25642851/

10-15 03:56
查看更多