W ten sposób rozwiązałem ten problem.
Użyłem wiadomości post do interfejsu API, aby wysłać listę liczb całkowitych jako dane.
Następnie zwróciłem dane jako niezliczone.
Kod wysyłający jest następujący:
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;
}
Kod odbierający jest następujący:
// 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;
}
Działa dobrze dla jednego lub wielu rekordów. Wypełnienie to metoda przeładowana za pomocą 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;
}
Pozwala to pobrać dane z tabeli złożonej (lista identyfikatorów), a następnie zwrócić rekordy, które naprawdę Cię interesują z tabeli docelowej.
Możesz zrobić to samo z widokiem, ale daje to nieco większą kontrolę i elastyczność.
Ponadto szczegóły tego, czego szukasz w bazie danych, nie są wyświetlane w ciągu zapytania. Nie musisz również konwertować z pliku csv.
Podczas korzystania z dowolnego narzędzia, takiego jak interfejs WWW API 2.x, należy pamiętać, że funkcje get, put, post, delete, head itp. Mają ogólne zastosowanie, ale nie są ograniczone do tego zastosowania.
Tak więc, chociaż post jest zwykle używany w kontekście tworzenia w interfejsie interfejsu WWW, nie jest on ograniczony do tego zastosowania. Jest to zwykłe połączenie HTML, którego można używać w dowolnym celu dozwolonym przez praktykę HTML.
Ponadto szczegóły tego, co się dzieje, są ukryte przed tymi „wścibskimi oczami”, które słyszymy o tych dniach.
Elastyczność w konwencjach nazewnictwa w interfejsie API 2.x i korzystanie z regularnych połączeń internetowych oznacza, że wysyłasz wywołanie do interfejsu API, które wprowadza w błąd szpiegów, którzy myślą, że naprawdę robisz coś innego. Możesz na przykład użyć „POST”, aby naprawdę odzyskać dane.