محتويات الدورة

ASP.NET Core / الأساسي: HTTP وتركيب التطبيق / الدرس 3

التوجيه واختيار نقطة النهاية

افصل مطابقة المسار وطريقة HTTP والربط وتحقيق المجال والتفويض كقرارات مستقلة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • قراءة قوالب المسارات وأدوار القيود.
  • تمييز 404 و 405 من رفض التحقق من المدخل.
  • معاملة بيانات المسار الوصفية كمدخل للوسطاء اللاحقين.

لا تحقق مطابقة المسار كيان الأعمال

يختار توجيه النقاط المرشحين بالأنماط والطرق والوصف الآخر. تصف قيم المسار المطابقة، لا كائنات قاعدة موثوقة. قد يقيد /orders/{id:int} الشكل، ويبقى العدد سالبا أوغائبا أو غير مخول. أبق قواعد المجال والتفويض صريحة.

تؤثر الأسماء والافتراضيات والأجزاء الاختيارية والجامعة والقيود في الاختيار. تجنب نقاطا متنافسة يصعب شرح أولويتها. لا تستخدم قيد التوجيه بديلا عن تحقق عادي عندما ينبغي للواجهة إرجاع خطأ عميل واضح لعملية مطابقة.

فحص بنية المسار المعلنة

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

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

csharp فحص نمط مسار من الإطار
using System;
using Microsoft.AspNetCore.Routing.Patterns;

var pattern = RoutePatternFactory.Parse("/orders/{id:int}");
var parameter = pattern.Parameters[0];
Console.WriteLine($"parameter={parameter.Name} policy={parameter.ParameterPolicies[0].Content}");
الناتج المتوقع
parameter=id policy=int

يعرض المحلل المعامل id مع نص سياسة int؛ ولا يختار نقطة نهاية أو ينفذها.

يختلف المسار الغائب والطريقة الخاطئة والمدخل الخاطئ

إذا لم تطابق نقطة المسار والسياسات فقد ينتج 404. وإذا وجدت مرشحات للمسار لكن الطريقة غير مدعومة فقد ينتج 405 بعقده المناسب. وقد يعيد المعالج المطابق 400 للمجال أو 404 لكيان غائب. لا تدمجها لمجرد أنها غير ناجحة.

يفحص المثال الثاني قيد عدد صحيح مباشرة بقيم اصطناعية. يختبر نتيجة المكون فقط. يحتاج اختيار المسار الكامل مجموعة النقاط وبيانات طرقها وحالات التنافس وغير المدعوم؛ فلا تعمم النداء المباشر على كل نتائج التوجيه.

csharp تشغيل قيد مسار واحد في الذاكرة
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Routing.Constraints;

var constraint = new IntRouteConstraint();
var context = new DefaultHttpContext();
var values = new RouteValueDictionary { ["id"] = "42" };
bool valid = constraint.Match(context, null, "id", values, RouteDirection.IncomingRequest);
values["id"] = "forty-two";
bool invalid = constraint.Match(context, null, "id", values, RouteDirection.IncomingRequest);
Console.WriteLine($"integer={valid} text={invalid}");
الناتج المتوقع
integer=True text=False

يقبل قيد العدد الصحيح القيمة 42 ويرفض الرمز النصي؛ ولا يصل طلب إلى مضيف.

قد يرفق التوجيه Endpoint مختارة بالسياق كي تفحص وسائط لاحقة التفويض أوCORS أوحدود المعدل. يجب أن تقع عند الحد المناسب. الوصف عقد تفسره مكونات مسجلة، ولا يفرض attribute زخرفي كل سياسة دون تهيئتها.

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

مراجعة سطح النقاط كاملا

وثق الطريقة والمسار والمصدر والتحقق وأنواع النتيجة والحالة والمصادقة والتفويض والنسخة لكل عملية. لا تجعل الجامع أوfallback يخفي تعيينا ناقصا أوطريقة غير مدعومة. لا يثبت طلب واحد رفض غير المقصود أوصحة الروابط.

اختبر الصحيح والطريقة الخاطئة والرمز المعيب والكيان الغائب والهوية الممنوعة والتهريب والتداخل حيث يلزم. أمثلة المكون حتمية وآمنة، ويبقى اختيار المضيف حدا تكامليا يحتاج تهيئة معزولة مخولة.

الأخطاء الشائعة وإصلاحها

يعامل قيد المسار int كأنه تحقق من قواعد الأعمال.

لماذا يحدث؟
اختلط اختيار المرشح بحسب الشكل بمعنى القيمة في المجال.
كيف تصلحه؟
تحقق من القيمة المطابقة ومن الكيان كلا على حدة.
كيف تتجنب تكراره؟
اختبر القيمة السالبة وحالة غياب الكيان.

يعيد fallback نجاحا لمسار لم تعين له نقطة مقصودة.

لماذا يحدث؟
تخفي نقطة نهاية واسعة السطح العام المراد توفيره.
كيف تصلحه؟
حدد سلوك fallback وحالته عن قصد.
كيف تتجنب تكراره؟
اختبر المسارات غير المعينة والطلبات ذات طريقة HTTP الخاطئة.

يكسر تغيير اسم في المسار مدخل المعالج دون وضوح.

لماذا يحدث؟
أسماء المعاملات جزء من عقود الربط وتوليد الروابط.
كيف تصلحه؟
حافظ على اتساق الأسماء واختبر الروابط المولدة والمدخلات.
كيف تتجنب تكراره؟
راجع تغييرات المسارات بوصفها تغييرات API.

اختبر فهمك

1. لماذا يمكن أن يطابق /orders/-1 قيد عدد صحيح مع بقائه مدخلا غير صالح للواجهة؟

اعرض الحل المشروح

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

2. ما الذي يغيب عن اختبار يستدعي IntRouteConstraint.Match مباشرة مرتين؟

اعرض الحل المشروح

لا يضم الاختبار نقاط التطبيق وطرق HTTP وترتيب الوسطاء وربط المعامل وتنفيذ الفعل والمصادقة والتفويض وfallback وتوليد الرابط. يظل مفيدا لفحص قيد العدد. أبلغ هذا الحد وأضف تكاملا لعقد الطريقة والمسار والحالة، ولا تعده تحقق API شاملا.

أهم ما تعلمته

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

المراجع الرسمية