Я решил эту проблему следующим образом.
Я использовал почтовое сообщение для 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;
}
Это позволяет вам извлекать данные из составной таблицы (списка идентификаторов), а затем возвращать записи, которые вас действительно интересуют, из целевой таблицы.
Вы можете сделать то же самое с видом, но это дает вам немного больше контроля и гибкости.
Кроме того, сведения о том, что вы ищете из базы данных, не отображаются в строке запроса. Вам также не нужно конвертировать из CSV-файла.
При использовании любого инструмента, такого как интерфейс web api 2.x, следует помнить, что функции get, put, post, delete, head и т. Д. Имеют общее назначение, но не ограничиваются этим использованием. .
Таким образом, хотя сообщение обычно используется в контексте создания в интерфейсе веб-API, оно не ограничивается этим использованием. Это обычный html-вызов, который можно использовать для любых целей, разрешенных html-практикой.
Кроме того, детали того, что происходит, скрыты от тех "любопытных глаз", которые мы так много слышим в эти дни.
Гибкость в соглашениях об именах в интерфейсе web api 2.x и использование обычных веб-вызовов означает, что вы отправляете вызов в web api, который вводит в заблуждение шумеров, заставляя их думать, что вы действительно делаете что-то еще. Вы можете использовать «POST» для реального извлечения данных, например.