ASP.NET Core Web API

معالجة متعددة المعلمات بكفاءة في طرق GET في C#

Spread the love

يُعدّ تمرير متغيرات متعددة إلى طريقة GET في C# متطلبًا شائعًا في تطوير واجهات برمجة التطبيقات الشبكية. تتناول هذه المقالة تقنيات متنوعة لتحقيق ذلك ضمن ASP.NET Core، مع التركيز على الوضوح، وقابلية الصيانة، وأفضل الممارسات.

محتويات

تمرير المتغيرات عبر التوجيه التقليدي

يُدمج التوجيه التقليدي المتغيرات مباشرةً في مسار عنوان URL. يُناسب هذا النهج عددًا صغيرًا من المتغيرات التي تحدد موردًا مباشرةً.

مثال: استرداد منتج بناءً على معرفه ومعرف فئته.

عنوان URL: /products/123/category/456


using Microsoft.AspNetCore.Mvc;

public class ProductsController : Controller
{
    public IActionResult GetProduct(int productId, int categoryId)
    {
        // معالجة productId و categoryId
        return Ok($"Product ID: {productId}, Category ID: {categoryId}");
    }
}

القيود: تصبح عناوين URL أقل قابلية للقراءة والصيانة مع زيادة عدد المتغيرات. وهي أقل مرونة للمتغيرات الاختيارية.

استخدام توجيه السمات و[FromQuery]

يوفر توجيه السمات تحكمًا أكبر في بنية عنوان URL. باستخدام [FromQuery]، يتم استخراج المتغيرات من سلسلة الاستعلام، مما يجعل عناوين URL أنظف وأكثر قابلية للإدارة، حتى مع وجود العديد من المتغيرات.

مثال: نفس مثال استرداد المنتج، ولكن باستخدام توجيه السمات و[FromQuery].

عنوان URL: /products?productId=123&categoryId=456


using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet]
    public IActionResult GetProduct([FromQuery] int productId, [FromQuery] int categoryId)
    {
        return Ok($"Product ID: {productId}, Category ID: {categoryId}");
    }
}

تعزز هذه الطريقة تنظيم عنوان URL وقابلية قراءته بشكل أفضل. تُمكّن سمة [ApiController] من التحقق التلقائي من النموذج ومعالجة الاستجابة.

معالجة المتغيرات الاختيارية

تعزز المتغيرات الاختيارية المرونة. استخدم قيمًا افتراضية ضمن توقيع إجراء التحكم.


[HttpGet]
public IActionResult GetProduct([FromQuery] int productId, [FromQuery] int categoryId, [FromQuery] int pageSize = 10)
{
    return Ok($"Product ID: {productId}, Category ID: {categoryId}, Page Size: {pageSize}");
}

هنا، pageSize تأخذ القيمة الافتراضية 10 إذا لم يتم توفيرها في سلسلة الاستعلام.

الاستفادة من ربط النموذج

بالنسبة لمتغيرات متعددة، ضع في اعتبارك إنشاء نموذج مخصص. يُحسّن هذا تنظيم التعليمات البرمجية وقابلية صيانتها. سيقوم ASP.NET Core تلقائيًا بربط سلسلة الاستعلام بخصائص النموذج.


public class ProductFilter
{
    public int ProductId { get; set; }
    public int CategoryId { get; set; }
    public int PageSize { get; set; } = 10; 
}

[HttpGet]
public IActionResult GetProduct(ProductFilter filter)
{
    return Ok($"Product ID: {filter.ProductId}, Category ID: {filter.CategoryId}, Page Size: {filter.PageSize}");
}

معالجة الأخطاء المتينة

تعامل دائمًا مع الأخطاء المحتملة، مثل المتغيرات المطلوبة المفقودة أو أنواع البيانات غير الصالحة. استخدم تقنيات مثل التحقق من صحة النموذج أو عمليات التحقق من المتغيرات الصريحة للتعامل بلطف مع هذه المواقف.


[HttpGet]
public IActionResult GetProduct(ProductFilter filter)
{
    if (filter.ProductId == 0)
    {
        return BadRequest("Product ID is required.");
    }
    // ... بقية منطقك ...
}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *