我使用dotNet创建了Web API。它有效,但是我有一个小问题。 这是我的控制器
WaybillDataAccessLayer objway = new WaybillDataAccessLayer();
public IEnumerable<Waybill> Get(string id_wb)
{
List<Waybill> lstWaybill = new List<Waybill>();
lstWaybill = objway.GetWaybill(id_wb).ToList();
return lstWaybill;
}
和我的模型(WaybillDataAccessLayer)
public IEnumerable<Waybill> GetWaybill(String id_wb)
{
List<Waybill> lswaybill = new List<Waybill>();
using (SqlConnection con = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("spGetWaybill", con); //Stored procedure on database
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@waybill", id_wb);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read()) //foreach
{
Waybill wb = new Waybill();
wb.waybill = rdr["waybill"].ToString();
wb.deskripsi = rdr["deskripsi"].ToString();
wb.tanggal = rdr["tanggal"].ToString();
wb.pengirim = rdr["pengirim"].ToString();
wb.lokasi = rdr["lokasi"].ToString();
wb.penerima = rdr["penerima"].ToString();
lswaybill.Add(wb);
}
con.Close();
}
return lswaybill;
}
当我运行此API时,输出将如下所示
[ { “ waybill”:“ 00000093”, “ deskripsi”:“备件”, “ tanggal”:“ 19990727”, “ pengirim”:“ JIEP”, “ lokasi”:“ HO”, “ penerima”:“ JKHO” } ]
我的问题是
如何删除[]?
如何添加其他信息,例如
{
“状态”:“成功”,
“数据” {}
}
谢谢您的帮助。
答案 0 :(得分:0)
您将返回WayBill对象的列表。如果您不希望结果JSON成为数组,则只需返回单个WayBill,而不是List。而且,如果您想将其包装在更多数据中,请创建一个表示该信息的类型,并填充其中的一个实例,然后将其返回。
由于您是按ID检索这些对象的,因此我假设任何给定的ID应该只有一个运单。因此,您可以简化数据访问层。
public Waybill GetWaybill(String id_wb)
{
using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("spGetWaybill", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@waybill", id_wb);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
rdr.Read();
Waybill wb = new Waybill();
wb.waybill = rdr["waybill"].ToString();
wb.deskripsi = rdr["deskripsi"].ToString();
wb.tanggal = rdr["tanggal"].ToString();
wb.pengirim = rdr["pengirim"].ToString();
wb.lokasi = rdr["lokasi"].ToString();
wb.penerima = rdr["penerima"].ToString();
return wb;
}
}
并添加类型以包装您的回复:
class GetWayBillResponse()
{
public string Status { get; set;}
public WayBill WayBill { get; set; }
}
请注意,如果您看到对象,则在此处添加状态并没有真正帮助,可以认为它是成功的。同样,API会以HTTP 200 OK状态代码响应。因此,这确实是多余的。
现在您的控制器将变为:
WaybillDataAccessLayer objway = new WaybillDataAccessLayer();
public GetWayBillResponse Get(string id_wb)
{
GetWayBillResponse response = new GetWayBillResponse();
response.Status = "Success";
response.WayBill = objway.GetWaybill(id_wb);
return response;
}
请注意,您可以进一步简化数据访问。您正在将结果列手动分配给WayBill对象。这是重复的和无聊的。如果您使用诸如Dapper之类的对象关系映射器,则可以删除很多样板代码。
这是使用Dapper的样子:
public Waybill GetWaybill(String id_wb)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
return con.QuerySingle<WayBill>("spGetWaybill", new { waybill = id_web }, commandType: CommandType.StoredProcedure);
}
}