Ich habe dieses Thema auf diese Weise angesprochen.
Ich habe eine Postnachricht 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 sowohl für einen als auch für mehrere Datensätze. Das Füllen 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 das gibt Ihnen ein wenig mehr Kontrolle und Flexibilität.
Außerdem werden die Einzelheiten der Abfrage aus der Datenbank nicht im Abfragetext angezeigt. Sie müssen auch nicht aus einer csv-Datei konvertieren.
Bei der Verwendung von Werkzeugen wie der Web-Api 2.x-Schnittstelle ist zu beachten, dass die Funktionen get, put, post, delete, head usw. einen allgemeinen Zweck haben, aber nicht auf diesen beschränkt sind.
Obwohl post im Allgemeinen in einem Erstellungskontext in der Web-Api-Schnittstelle verwendet wird, ist es nicht auf diese Verwendung beschränkt. Es ist ein regelmäßig html-Aufruf, der für jeden nach der html-Praxis zulässigen Zweck verwendet werden kann.
Außerdem werden die Einzelheiten der Vorgänge vor den "neugierigen Augen" verborgen, von denen man heutzutage so viel hört.
Die Flexibilität der Namenskonventionen in der Web-Api-2.x-Schnittstelle und die Verwendung regulärer Webaufrufe bedeutet, dass Sie einen Aufruf an die Web-Api senden, der Schnüfflern vorgaukelt, Sie würden in Wirklichkeit etwas anderes tun. Sie können z. B. "POST" verwenden, um wirklich Daten abzurufen.