ฉันแก้ไขปัญหานี้ด้วยวิธีนี้
ฉันใช้ข้อความโพสต์ไปยัง api เพื่อส่งรายการจำนวนเต็มเป็นข้อมูล
จากนั้นฉันคืนค่าข้อมูลเป็นจำนวนเต็ม
รหัสการส่งมีดังนี้:
public override IEnumerable<Contact> Fill(IEnumerable<int> ids)
{
IEnumerable<Contact> result = null;
if (ids!=null&&ids.Count()>0)
{
try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:49520/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
String _endPoint = "api/" + typeof(Contact).Name + "/ListArray";
HttpResponseMessage response = client.PostAsJsonAsync<IEnumerable<int>>(_endPoint, ids).Result;
response.EnsureSuccessStatusCode();
if (response.IsSuccessStatusCode)
{
result = JsonConvert.DeserializeObject<IEnumerable<Contact>>(response.Content.ReadAsStringAsync().Result);
}
}
}
catch (Exception)
{
}
}
return result;
}
รหัสรับเป็นดังนี้:
// POST api/<controller>
[HttpPost]
[ActionName("ListArray")]
public IEnumerable<Contact> Post([FromBody]IEnumerable<int> ids)
{
IEnumerable<Contact> result = null;
if (ids != null && ids.Count() > 0)
{
return contactRepository.Fill(ids);
}
return result;
}
มันใช้งานได้ดีสำหรับหนึ่งระเบียนหรือหลายระเบียน การเติมเป็นวิธีการใช้งานมากเกินไปโดยใช้ DapperExtensions:
public override IEnumerable<Contact> Fill(IEnumerable<int> ids)
{
IEnumerable<Contact> result = null;
if (ids != null && ids.Count() > 0)
{
using (IDbConnection dbConnection = ConnectionProvider.OpenConnection())
{
dbConnection.Open();
var predicate = Predicates.Field<Contact>(f => f.id, Operator.Eq, ids);
result = dbConnection.GetList<Contact>(predicate);
dbConnection.Close();
}
}
return result;
}
สิ่งนี้ช่วยให้คุณสามารถดึงข้อมูลจากตารางคอมโพสิต (รายการ id) แล้วส่งกลับระเบียนที่คุณสนใจจริงๆจากตารางเป้าหมาย
คุณสามารถทำสิ่งเดียวกันได้ด้วยมุมมอง แต่สิ่งนี้จะช่วยให้คุณควบคุมและยืดหยุ่นได้มากกว่าเดิมเล็กน้อย
นอกจากนี้รายละเอียดของสิ่งที่คุณกำลังค้นหาจากฐานข้อมูลจะไม่แสดงในสตริงแบบสอบถาม คุณไม่จำเป็นต้องแปลงจากไฟล์ csv
คุณต้องจำไว้เมื่อใช้เครื่องมือใด ๆ เช่นส่วนต่อประสานเว็บ api 2.x คือฟังก์ชั่นรับ, วาง, โพสต์, ลบ, หัว ฯลฯ มีการใช้งานทั่วไป แต่ไม่ จำกัด เฉพาะการใช้งานนั้น
ดังนั้นในขณะที่โพสต์มักจะใช้ในการสร้างบริบทในเว็บอินเตอร์เฟส API มันไม่ได้ จำกัด การใช้งานที่ มันคือการเรียก html ปกติที่สามารถใช้เพื่อวัตถุประสงค์ใด ๆ ที่ได้รับอนุญาตจากการปฏิบัติ html
นอกจากนี้รายละเอียดของสิ่งที่เกิดขึ้นจะถูกซ่อนไว้จาก "prying ตา" ที่เราได้ยินเกี่ยวกับวันนี้
ความยืดหยุ่นในการตั้งชื่อข้อตกลงในส่วนต่อประสานเว็บ api 2.x และการใช้การโทรผ่านเว็บปกติหมายความว่าคุณส่งการเรียกไปยัง web api ที่ทำให้ผู้สอดแนมเข้าใจผิดคิดว่าคุณกำลังทำสิ่งอื่นอยู่ คุณสามารถใช้ "POST" เพื่อดึงข้อมูลได้ตัวอย่างเช่น