J'ai abordé cette question de cette façon.
J'ai utilisé un message de poste à l'API pour envoyer la liste des entiers en tant que données.
Ensuite, j'ai renvoyé les données sous forme d'innombrables.
Le code d'envoi est le suivant:
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;
}
Le code de réception est le suivant:
// 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;
}
Cela fonctionne très bien pour un ou plusieurs enregistrements. Le remplissage est une méthode surchargée utilisant 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;
}
Cela vous permet d'extraire des données d'une table composite (la liste des identifiants), puis de renvoyer les enregistrements qui vous intéressent vraiment dans la table cible.
Vous pouvez faire de même avec une vue, mais cela vous donne un peu plus de contrôle et de flexibilité.
De plus, les détails de ce que vous recherchez dans la base de données ne sont pas affichés dans la chaîne de requête. Vous n'avez pas non plus à convertir à partir d'un fichier csv.
Vous devez garder à l'esprit lorsque vous utilisez un outil comme l'interface web api 2.x, les fonctions get, put, post, delete, head, etc. ont une utilisation générale, mais ne sont pas limitées à cette utilisation.
Ainsi, bien que la publication soit généralement utilisée dans un contexte de création dans l'interface Web API, elle n'est pas limitée à cette utilisation. Il s'agit d'un appel html régulier qui peut être utilisé à toutes fins autorisées par la pratique html.
De plus, les détails de ce qui se passe sont cachés à ces "regards indiscrets" dont on entend tant parler ces jours-ci.
La flexibilité des conventions de dénomination dans l'interface Web Api 2.x et l'utilisation d'appels Web réguliers signifie que vous envoyez un appel à l'API Web qui induit les espions en erreur en pensant que vous faites vraiment autre chose. Vous pouvez utiliser "POST" pour récupérer vraiment des données, par exemple.