【问题标题】:How to pass Data set to web API using HTTP POST如何使用 HTTP POST 将数据集传递给 Web API
【发布时间】:2018-03-29 12:05:13
【问题描述】:

我需要将dataset 传递给Web API 以将dataset 存储在数据库中。这是我的 C# 客户端代码。以前我会传递这样的人员数据(commented line)。但这次我有一个Dataset。如何使用 http POST 将dataset 传递给 web api?

DataSet rslt;

在这个dataset 中,有四列pid,proid,name,msg

private void btnInsert_Click(object sender, EventArgs e)
{
    using (var client = new HttpClient())
    {
        try
        {
            //person p = new person { PID = 1, ProjectID = 5, Name= "paul",  Msg = "hello"};
            client.BaseAddress = new Uri("http://localhost:10927/");
            var response = client.PostAsJsonAsync("api/Person", p).Result;
            if (response.IsSuccessStatusCode)
            {
                Console.Write("Success");
            }
            else
                Console.Write("Error");
        }
        catch (Exception x)
        {
            Console.WriteLine(x.Message);
        }
    }
}

在我的 Web API 中,我的控制器类的这一部分:

public HttpResponseMessage Post([FromBody]Person value)
{
    long id;
    PersonPersistence dp = new PersonPersistence();
    id = dp.addPerson(value);
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
    response.Headers.Location = new Uri(Request.RequestUri, string.Format("Manager/{0}", id));
    return response;
} 

这是我PersonPersistence.class的一部分

public long addPerson(Person t)
{
    long id = 0;
    try
    {
        string sqlString = "INSERT INTO tblperson(pid,proid,name,dis) VALUES (@1,@2,@3,@4);";
        MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sqlString, conn);
        cmd.Parameters.AddWithValue("@1", t.Time);
        cmd.Parameters.AddWithValue("@2", t.Date);
        cmd.Parameters.AddWithValue("@3", t.Batch);
        cmd.Parameters.AddWithValue("@4", t.Leture);
        cmd.ExecuteNonQuery();
        id = cmd.LastInsertedId;
        return id;
    }
    catch (MySqlException x)
    {
        Console.WriteLine(x.Number);
    }
    return id;
}

【问题讨论】:

  • 使用 DataSet 很糟糕,但如果您确实需要这样做,我会将其序列化/反序列化为 XML
  • @hardkoded 我是这个领域的新手先生,我对此不太了解。请帮我解决
  • 如果你想使用DataSet(不管是什么原因),我认为最完美的方法是,如果你发送XML并且你可以很容易地用@将你的DataSet序列化为XML 987654334@'s GetXml() 方法,然后在服务器端,使用DataSet's ReadXml(XmlReader.Create(new StringReader(xml))) 将其反序列化。
  • @SeM 先生,你能给我一个示例代码吗,我不清楚这个

标签: c# dataset http-post asp.net-web-api2 parameter-passing


【解决方案1】:

您可以使用以下方法将数据表转换为 xml 字符串

           DataTable dt = new DataTable();
            MemoryStream ms = new MemoryStream();
            dt.WriteXml(ms);
            long length = ms.Length;
            ms.Position = 0;
            byte[] buffer = new byte[length];
            ms.Read(buffer,0,(int)length);
            string xml = Encoding.UTF8.GetString(buffer);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
相关资源
最近更新 更多