簡體   English   中英

如何將 json 陣列信息傳遞給網絡核心 web api

[英]how to pass json array information to net core web api

I am building a web api with net core, I need to use the post method to save the information of a json file, the drawback is that the json file has an array and I do not know how to send the information to the stored procedure在 sql 中保存信息 json 文件是這個

"buyer": { // 
   "firstName": "fabio",
   "lastName": "gomez",
   "documentType": 0, // Puede ser 0: DNI, 1: Pasaporte o 2: Carnet de Extranjeria
   "documentNumber": "01234567", // Permitir letras para pasaportes extranjeros
   "phoneNumber": "51912345678",
   "email": "hnos@gmail.com"
 },
 "passengers": [{ // En el primer pasajero, pueden repetirse los datos del comprador
     "seat": 1,
     "firstName": "pedro",
     "lastName": "peres", // Considerar nueva campo 
     "secondLastName": "martinez",
     "documentType": 0, // Puede ser 0: DNI, 1: Pasaporte o 2: Carnet de Extranjeria
     "documentNumber": "15588",
     "age": 42,
     "gender": 0, // Puede ser 0: Masculino, 1: Femenino
   },
   {
     "seat": 2,
     "firstName": "Adriana",
     "lastName": "gomez",
     "secondLastName": "lopez",
     "documentType": 1, // Puede ser 0: DNI, 1: Pasaporte o 2: Carnet de Extranjeria
     "documentNumber": "XY01234567",
     "age": 40,
     "gender": 1, // Puede ser 0: Masculino, 1: Femenino
   }
 ],

這個json必須通過post進入系統,我用的是下面的驅動

[HttpPost]
  public async Task<IActionResult> Post([FromBody] List<string> valores)
        {
             await _repository.Insert(valores);
            return Ok();


        }

嘗試用 ado.net 做一些事情,但它不起作用

  public async Task Insert(List<string> parametros)
        {
            using (SqlConnection sql = new SqlConnection(_connectionString))
            {
                using (SqlCommand cmd = new SqlCommand("sp_insertarpasajero", sql))
                {
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    //cmd.Parameters.Add(new SqlParameter("@Id", parametros));

                    await sql.OpenAsync();
                    await cmd.ExecuteNonQueryAsync();
                    return;
                }
            }
        }

我不知道如何將接收帖子的 controller 的信息傳遞到 object 或數據表,然后在存儲過程中使用它感謝您的合作

For you json file, you should create a model object to accept the json data.The following is my working demo, you could refer to and make the modification on your project:

Model

 public class Buyer
{
    public int Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int DocumentType { get; set; }
    public string DocumentNumber { get; set; }
    public string PhoneNumber { get; set; }

    public string Email { get; set; }
}
 public class Passenger
{
    public int Id { get; set; }
    public int Seat { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string SecondLastName { get; set; }
    public int DocumentType { get; set; }
    public string DocumentNumber { get; set; }
    public string Age { get; set; }

    public int Gender { get; set; }
}

 public class OrderInfo
{
    public Buyer Buyer { get; set; }
    public List<Passenger> Passengers { get; set; }
}

存儲過程,使用OPENJSON (Transact-SQL)

CREATE PROCEDURE [dbo].[sp_insertpassenger]
  @json NVARCHAR(max)
AS
  INSERT INTO Passenger(
  Seat,FirstName,LastName,SecondLastName,
  DocumentType,DocumentNumber,Age,Gender)

  Select *
  FROM OPENJSON(@json ,'$.Passengers')
  WITH(
  Seat int '$.Seat',
  FirstName nvarchar(50) '$.FirstName',
  LastName nvarchar(50) '$.LastName',
  SecondLastName nvarchar(50) '$.SecondLastName',
  DocumentType int  '$.DocumentType',
  DocumentNumber nvarchar(50) '$.DocumentNumber',
  Age int '$.Age',
  Gender int '$.Gender' );
RETURN 0

Controller 和存儲庫方法

[HttpPost]
    public async Task<IActionResult> Post([FromBody] OrderInfo values)
    {
        await _repository.Insert(values);
        return Ok();
    }

public async Task Insert(OrderInfo parameter)
    {

        using (SqlConnection sql = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = new SqlCommand("sp_insertpassenger", sql))
            {
                cmd.CommandType = System.Data.CommandType.StoredProcedure;

                var json = JsonConvert.SerializeObject(parameter);
                cmd.Parameters.Add(new SqlParameter("@json", json));

                await sql.OpenAsync();
                await cmd.ExecuteNonQueryAsync();
                return;
            }
        }
    }

結果在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM