البرمجة

مشكلة استقبال معلمتين في Web API

في الواقع، الخطأ الذي تواجهه هنا يعود إلى طريقة تنسيق البيانات التي ترسلها من العميل إلى خادم Web API. تحتاج إلى فهم كيفية تنسيق البيانات لتناسب توقعات Web API بشأن كيفية استلام وتحليل المعلومات.

عند استخدام السمة [FromBody] في تعريف طريقة Web API، فإنه يُتوقع أن يصل البيانات في جسم الطلب (Request Body) بتنسيق محدد. ومن الصعب تحليل عدة معلمات من نوع بريميتيف (مثل int) من جسم الطلب بشكل صحيح.

تقدم الطريقة الصحيحة لإرسال عدة معلمات من العميل إلى الخادم من خلال تغيير تنسيق البيانات المرسلة. بدلاً من إرسالها كـ FormUrlEncodedContent، يمكنك إرسالها في جسم الطلب بتنسيق JSON.

لتحقيق ذلك، يمكنك تعديل الكود في العميل ليكون كالتالي:

csharp
HttpClient client = new HttpClient(); var data = new { A = 123, B = 456 }; var json = JsonConvert.SerializeObject(data); var content = new StringContent(json, Encoding.UTF8, "application/json"); client.PostAsync("http://localhost/API/Test", content).Result;

مع تحديث العميل لاستخدام application/json كنوع للمحتوى، وتسلسل البيانات في تنسيق JSON، يمكن للخادم الآن استقبال البيانات بشكل صحيح وفهم كل من A و B بدون مشاكل.

بعد تحديث العميل، يمكنك تعديل طريقة الـ Web API كما يلي:

csharp
[Route("API/Test"), HttpPost] public IHttpActionResult Test([FromBody] TestData data) { // Use data.A and data.B here return Ok(); } public class TestData { public int A { get; set; } public int B { get; set; } }

وبهذه الطريقة، يمكنك تقديم معلمات A و B في كائن TestData والوصول إليها بسهولة في الخادم.

المزيد من المعلومات

بالطبع، سأوفّر المزيد من المعلومات لتوضيح النقاط الهامة حول هذا الموضوع.

أولاً، دعني أشرح الفرق بين استخدام [FromBody] و [FromUri] في Web API. عند استخدام [FromBody]، فإنه يُشير إلى أن البيانات التي تمررها إلى الوظيفة المرئية عبر الطلب تأتي من جسم الطلب. في حين أن [FromUri] يشير إلى أن البيانات تأتي من جزء الطلب الذي يُعرف بالـ “القسم” (مثل العنوان، أو الاستعلام، أو معلومات الطريق).

ثانياً، عندما يتعلق الأمر بإرسال بيانات متعددة من العميل إلى الخادم، يُفضل استخدام تنسيق الـ JSON. يتيح JSON تمثيل البيانات بشكل هيكلي وسهل التحليل للخادم. وبالتالي، يمكن تحويل كائن C# إلى JSON باستخدام مكتبة مثل Newtonsoft.Json، كما فعلت في الكود المقدم.

ثالثًا، عند تعريف طريقة Web API، يمكنك تجميع المعلمات المرسلة معًا في كائن واحد. هذا يجعل التعامل مع البيانات أكثر تنظيمًا وسهولة. في المثال السابق، أنشأنا كائنًا TestData لاحتواء البيانات A و B. هذا يجعل من السهل على الخادم استقبال البيانات واستخدامها بشكل مناسب.

باختصار، من الضروري فهم كيفية تنسيق البيانات المرسلة من العميل إلى الخادم، واختيار الطريقة الأمثل لتمثيل واستقبال هذه البيانات. من خلال تطبيق الأساليب الصحيحة، يمكن تجنب الأخطاء وتحسين أداء تطبيقات الويب.

زر الذهاب إلى الأعلى