मैंने इस मुद्दे को इस तरह से संबोधित किया।
मैंने डेटा के रूप में पूर्णांकों की सूची भेजने के लिए एपीआई को एक पोस्ट संदेश का उपयोग किया।
फिर मैंने डेटा को एक ienumerable के रूप में वापस कर दिया।
भेजने का कोड इस प्रकार है:
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;
}
प्राप्त कोड इस प्रकार है:
// 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;
}
यह सिर्फ एक रिकॉर्ड या कई रिकॉर्ड के लिए ठीक काम करता है। भराव 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;
}
यह आपको एक समग्र तालिका (आईडी सूची) से डेटा प्राप्त करने की अनुमति देता है, और फिर उन रिकॉर्ड को वापस कर देता है जिन्हें आप वास्तव में लक्ष्य तालिका से रुचि रखते हैं।
आप एक दृश्य के साथ भी ऐसा कर सकते हैं, लेकिन यह आपको थोड़ा अधिक नियंत्रण और लचीलापन देता है।
इसके अलावा, डेटाबेस से जो आप चाह रहे हैं उसका विवरण क्वेरी स्ट्रिंग में नहीं दिखाया गया है। आपको csv फ़ाइल से कनवर्ट करने की भी आवश्यकता नहीं है।
वेब एपीआई 2.x इंटरफ़ेस जैसे किसी भी टूल का उपयोग करते समय आपको यह ध्यान रखना होगा कि फ़ंक्शंस, पुट, पोस्ट, डिलीट, हेड इत्यादि का फ़ंक्शंस में एक सामान्य उपयोग होता है, लेकिन यह उस उपयोग के लिए प्रतिबंधित नहीं है।
इसलिए, जबकि पोस्ट आमतौर पर वेब एपीआई इंटरफेस में एक संदर्भ में उपयोग किया जाता है, यह उस उपयोग के लिए प्रतिबंधित नहीं है। यह एक नियमित html कॉल है जिसका उपयोग html अभ्यास द्वारा अनुमत किसी भी उद्देश्य के लिए किया जा सकता है।
इसके अलावा, जो कुछ चल रहा है उसका विवरण उन "चुभती आँखों" से छिपा है जो हम इन दिनों के बारे में बहुत कुछ सुनते हैं।
वेब एपीआई 2.x इंटरफ़ेस और नियमित वेब कॉलिंग के उपयोग में कन्वेंशनों के नामकरण में लचीलापन का मतलब है कि आप वेब एप को कॉल भेजते हैं जो स्नूपर्स को यह सोचने में गुमराह करता है कि आप वास्तव में कुछ और कर रहे हैं। उदाहरण के लिए, डेटा को पुनः प्राप्त करने के लिए आप "POST" का उपयोग कर सकते हैं।