Eu resolvi esse problema dessa maneira.
Eu usei uma mensagem de postagem na API para enviar a lista de números inteiros como dados.
Depois, retornei os dados como inumeráveis.
O código de envio é o seguinte:
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;
}
O código de recebimento é o seguinte:
// 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;
}
Funciona muito bem para um registro ou muitos registros. O preenchimento é um método sobrecarregado usando 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;
}
Isso permite que você busque dados de uma tabela composta (a lista de IDs) e, em seguida, retorne os registros de seu interesse na tabela de destino.
Você poderia fazer o mesmo com uma visualização, mas isso lhe dará um pouco mais de controle e flexibilidade.
Além disso, os detalhes do que você está procurando no banco de dados não são mostrados na string de consulta. Você também não precisa converter de um arquivo csv.
Você deve ter em mente que, ao usar qualquer ferramenta como a interface da API da Web 2.x, as funções get, put, post, delete, head, etc. têm um uso geral, mas não estão restritas a esse uso.
Portanto, embora a postagem geralmente seja usada em um contexto de criação na interface da API da web, ela não se restringe a esse uso. É uma chamada html regular que pode ser usada para qualquer finalidade permitida pela prática html.
Além disso, os detalhes do que está acontecendo estão ocultos daqueles "olhares indiscretos" que ouvimos muito sobre esses dias.
A flexibilidade nas convenções de nomenclatura na interface da API da Web 2.x e o uso de chamadas regulares na Web significa que você envia uma chamada para a API da Web que induz os bisbilhoteiros a pensar que você está realmente fazendo outra coisa. Você pode usar "POST" para realmente recuperar dados, por exemplo.