Bu sorunu bu şekilde ele aldım.
Tamsayıların listesini veri olarak göndermek için api'ye bir mesaj gönderdim.
Sonra verileri geri dönüşümsüz olarak geri verdim.
Gönderme kodu aşağıdaki gibidir:
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;
}
Alıcı kodu aşağıdaki gibidir:
// 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;
}
Bir kayıt veya birçok kayıt için iyi çalışır. Dolgu, DapperExtensions kullanan aşırı yüklenmiş bir yöntemdir:
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;
}
Bu, bileşik bir tablodan (kimlik listesi) veri almanıza ve ardından gerçekten ilgilendiğiniz kayıtları hedef tablodan döndürmenize olanak tanır.
Aynı şeyi bir görünümle de yapabilirsiniz, ancak bu size biraz daha fazla kontrol ve esneklik sağlar.
Ayrıca, veritabanından ne aradığınızı ayrıntıları sorgu dizesinde gösterilmez. Ayrıca bir csv dosyasından dönüştürmek zorunda değilsiniz.
Web api 2.x arayüzü gibi herhangi bir aracı kullanırken, get, put, post, delete, head, vb. Fonksiyonların genel bir kullanımı olduğu, ancak bu kullanımla sınırlı olmadığı akılda tutulmalıdır.
Bu nedenle, yazı genellikle web api arayüzünde bir oluşturma bağlamında kullanılırken, bu kullanımla sınırlı değildir. Bu bir olan normal herhangi amacı html uygulama tarafından izin için kullanılabilecek html çağrı.
Buna ek olarak, olup bitenlerin ayrıntıları bugünlerde çok duyduğumuz “meraklı gözlerden” gizlidir.
Web api 2.x arayüzündeki kuralları adlandırma ve düzenli web çağrısı kullanma esnekliği, web api'ye, başka bir şey yaptığınızı düşünmek için snoopers'ı yanlış yönlendiren bir çağrı gönderdiğiniz anlamına gelir. Örneğin, verileri gerçekten almak için "POST" kullanabilirsiniz.