[英]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.