Tôi đã giải quyết vấn đề này theo cách này.
Tôi đã sử dụng một thông điệp gửi đến api để gửi danh sách các số nguyên dưới dạng dữ liệu.
Sau đó, tôi trả lại dữ liệu dưới dạng vô số.
Mã gửi như sau:
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;
}
Mã nhận như sau:
// 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;
}
Nó hoạt động tốt chỉ cho một hồ sơ hoặc nhiều hồ sơ. Điền vào là một phương thức quá tải bằng 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;
}
Điều này cho phép bạn tìm nạp dữ liệu từ một bảng tổng hợp (danh sách id), sau đó trả về các bản ghi mà bạn thực sự quan tâm từ bảng mục tiêu.
Bạn có thể làm tương tự với một khung nhìn, nhưng điều này cho phép bạn kiểm soát và linh hoạt hơn một chút.
Ngoài ra, các chi tiết về những gì bạn đang tìm kiếm từ cơ sở dữ liệu không được hiển thị trong chuỗi truy vấn. Bạn cũng không phải chuyển đổi từ tệp csv.
Bạn phải lưu ý khi sử dụng bất kỳ công cụ nào như giao diện web api 2.x là các chức năng get, put, post, xóa, head, v.v., có một cách sử dụng chung, nhưng không bị hạn chế đối với việc sử dụng đó.
Vì vậy, trong khi bài viết thường được sử dụng trong ngữ cảnh tạo trong giao diện api web, nó không bị hạn chế sử dụng. Đó là một cuộc gọi html thông thường có thể được sử dụng cho bất kỳ mục đích nào được phép thực hành html cho phép.
Ngoài ra, các chi tiết về những gì đang diễn ra được ẩn giấu khỏi những "con mắt tò mò" mà chúng ta nghe rất nhiều về những ngày này.
Tính linh hoạt trong quy ước đặt tên trong giao diện web api 2.x và sử dụng cuộc gọi web thông thường có nghĩa là bạn gửi một cuộc gọi đến web api khiến những kẻ rình mò nghĩ rằng bạn đang thực sự làm việc khác. Bạn có thể sử dụng "POST" để lấy dữ liệu thực sự, ví dụ.