Я решил эту проблему следующим образом.
Я использовал сообщение в 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» для реального извлечения данных.