Ich habe dieses Problem auf diese Weise angesprochen.
Ich habe eine Post-Nachricht an die API verwendet, um die Liste der Ganzzahlen als Daten zu senden.
Dann habe ich die Daten als ienumerable zurückgegeben.
Der Sendecode lautet wie folgt:
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;
}
Der Empfangscode lautet wie folgt:
// 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;
}
Es funktioniert gut für einen Datensatz oder mehrere Datensätze. Die Füllung ist eine überladene Methode mit 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;
}
Auf diese Weise können Sie Daten aus einer zusammengesetzten Tabelle (der ID-Liste) abrufen und dann die Datensätze, an denen Sie wirklich interessiert sind, aus der Zieltabelle zurückgeben.
Sie könnten dasselbe mit einer Ansicht tun, aber dies gibt Ihnen ein wenig mehr Kontrolle und Flexibilität.
Außerdem werden die Details dessen, was Sie in der Datenbank suchen, nicht in der Abfragezeichenfolge angezeigt. Sie müssen auch nicht aus einer CSV-Datei konvertieren.
Wenn Sie ein Tool wie die Web-API 2.x-Oberfläche verwenden, müssen Sie berücksichtigen, dass die Funktionen zum Abrufen, Einfügen, Veröffentlichen, Löschen, Kopf usw. eine allgemeine Verwendung haben, jedoch nicht auf diese Verwendung beschränkt sind.
Während Post im Allgemeinen in einem Erstellungskontext in der Web-API-Oberfläche verwendet wird, ist es nicht auf diese Verwendung beschränkt. Es ist ein regulärer HTML-Aufruf, der für jeden von der HTML-Praxis zugelassenen Zweck verwendet werden kann.
Darüber hinaus sind die Details dessen, was vor sich geht, vor diesen "neugierigen Augen" verborgen, von denen wir heutzutage so viel hören.
Die Flexibilität bei der Benennung von Konventionen in der Web-API 2.x-Oberfläche und die Verwendung von regulären Web-Anrufen bedeutet, dass Sie einen Anruf an die Web-API senden, der Snoopers in die Irre führt, zu glauben, dass Sie wirklich etwas anderes tun. Mit "POST" können Sie beispielsweise wirklich Daten abrufen.